web-dev-qa-db-ja.com

ファイル名にタイムスタンプを追加する

同じディレクトリに同じファイルの複数のバージョンを持ちたいと思うこの問題に何度か遭遇しました。 C#を使用してこれを行っている方法は、このDateTime.Now.ToString().Replace('/', '-').Replace(':', '.')のようなものを使用してファイル名にタイムスタンプを追加することです。これを行うためのより良い方法はありますか?

111
Mark

DateTime.ToString Method(String) を使用できます

DateTime.Now.ToString("yyyyMMddHHmmssfff")

または string.Format

string.Format("{0:yyyy-MM-dd_hh-mm-ss-fff}",DateTime.Now);

または 補間された文字列

$"{DateTime.Now:yyyy-MM-dd_hh-mm-ss-fff}"

次のカスタム形式指定子がありますy(年)、M(月)、d(日)、h(12時間)、H(24時間)、m(分)、s(秒)、f(秒の小数部)、F (2番目の小数部、末尾のゼロはトリミングされます)、t(PMまたはAM)およびz(タイムゾーン)。

拡張方法あり

使用法:

string result = "myfile.txt".AppendTimeStamp();
//myfile20130604234625642.txt

拡張方法

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}
244
Damith

私は使用したい:

string result = "myFile_" + DateTime.Now.ToFileTime() + ".txt";

ToFileTime()は何をしますか?

現在のDateTimeオブジェクトの値をWindowsファイル時間に変換します。

public long ToFileTime()

Windowsファイル時間は、西暦1601年1月1日午前0時(西暦)協定世界時(UTC)から経過した100ナノ秒間隔の数を表す64ビット値です。 Windowsは、ファイル時間を使用して、アプリケーションがファイルを作成、アクセス、またはファイルに書き込むタイミングを記録します。

ソース: MSDNドキュメント-DateTime.ToFileTimeメソッド

14
Ads

おそらく、代わりにDateTime.Now.Ticksを追加すると、3つの文字列を作成せず、ティック値も常に一意になるため、少し速くなります。

8
Icarus

使用できます:

Stopwatch.GetTimestamp();
2
Joseph

代わりに以下を使用できます。

DateTime.Now.Ticks
1
gokul