将TimeStamp附加到文件名

Mar*_*ark 113 .net c# file-io datetime file

我曾经多次遇到过这个问题,我希望在同一个目录中有同一个文件的多个版本.我使用C#的方式是通过向文件名添加时间戳,使用类似的方法DateTime.Now.ToString().Replace('/', '-').Replace(':', '.').有一个更好的方法吗?

Dam*_*ith 251

您可以使用DateTime.ToString方法(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 (第二部分,尾随零被修剪),t(PM或AM)和z(时区).

使用扩展方法

用法:

string result = "myfile.txt".AppendTimeStamp();
//myfile20130604234625642.txt
Run Code Online (Sandbox Code Playgroud)

扩展方法

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我添加了`Path.GetDirectoryName(fileName)` 来获取文件的完整路径。然后用`Path.Combine()`替换`string.Concat()`得到完整的文件名。 (2认同)

Ads*_*Ads 14

我更喜欢使用:

string result = "myFile_" + DateTime.Now.ToFileTime() + ".txt";
Run Code Online (Sandbox Code Playgroud)

ToFileTime()做什么?

将当前DateTime对象的值转换为Windows文件时间.

public long ToFileTime()

Windows文件时间是64位值,表示自公元1601年1月1日午夜12点(世卫时间)协调世界时(UTC)以来经过的100纳秒间隔的数量.Windows使用文件时间来记录应用程序创建,访问或写入文件的时间.

来源:MSDN文档 - DateTime.ToFileTime方法


Ica*_*rus 8

DateTime.Now.Ticks相反,或许可以加快一点,因为你不会创建3个字符串,并且ticks值也将始终是唯一的.