向文件名追加 TimeStamp

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

203936 次浏览

也许附加 DateTime.Now.Ticks会快一点,因为您不会创建3个字符串,而且刻度值也总是唯一的。

你可以使用 ToString 方法(String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

字符串格式

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

插值字符串

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

有以下自定义格式说明符 y (year)、 M (month)和 d (日) ,h (小时12) ,H (小时24) ,m (分钟) ,s (秒) ,f (秒) 分数) ,F (第二个分数,后面的零被修剪) ,t (P.M 或 A.M)和 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)
);
}
}

我更喜欢用:

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

ToFileTime ()是做什么的?

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

public long ToFileTime()

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

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

你可使用:

Stopwatch.GetTimestamp();

你可改用以下方法:

DateTime.Now.Ticks

在 maf-soft 的帮助下,我创建了自己的解决方案,它也可以处理 Pathes。

这些是我使用的单元测试:

Assert.Test(new MyPathTools().AppendTimeStamp(@"AnyFile.pdf", new FakeMyDateTime("15.2.2021 15:23:17")),
@"AnyFile20210215152317.pdf");
Assert.Test(new MyPathTools().AppendTimeStamp(@"C:\Temp\Test\", new FakeMyDateTime("15.2.2021 15:23:17")),
@"C:\Temp\Test\20210215152317");
Assert.Test(new MyPathTools().AppendTimeStamp(@"C:\Temp\Test\AnyFile.pdf", new FakeMyDateTime("15.2.2021 15:23:17")),
@"C:\Temp\Test\AnyFile20210215152317.pdf");

代码(用于复制和粘贴)如下:

public class MyPathTools
{
public string AppendTimeStamp(string fileName)
{
return Path.Combine(Path.GetDirectoryName(fileName), string.Concat(Path.GetFileNameWithoutExtension(fileName),
DateTime.Now.ToString("yyyyMMddHHmmss"),
Path.GetExtension(fileName))
);
}
}

与我的框架(并且是不可测试的)一起工作的代码如下:

public class MyPathTools : IMyPathTools
{
public string AppendTimeStamp(string fileName, IMyDateTime myDateTime)
{
return Path.Combine(Path.GetDirectoryName(fileName), string.Concat(Path.GetFileNameWithoutExtension(fileName),
myDateTime.Now.ToString("yyyyMMddHHmmss"),
Path.GetExtension(fileName))
);
}
}