我曾多次遇到这个问题,我希望在同一个目录中有同一个文件的多个版本。我使用 C # 的方法是在文件名中添加一个时间戳,比如 DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')。 还有更好的办法吗?
DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')
也许附加 DateTime.Now.Ticks会快一点,因为您不会创建3个字符串,而且刻度值也总是唯一的。
DateTime.Now.Ticks
你可以使用 ToString 方法(String)
DateTime.Now.ToString("yyyyMMddHHmmssfff")
或 字符串格式
string.Format("{0:yyyy-MM-dd_HH-mm-ss-fff}", DateTime.Now);
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 使用文件时间来记录应用程序创建、访问或写入文件的时间。
将当前 DateTime 对象的值转换为 Windows 文件时间。
public long ToFileTime()
Windows 文件时间是一个64位的值,表示自公元1601年1月1日午夜12:00(C.E.)协调世界时(UTC)以来经过的100纳秒间隔的数目。Windows 使用文件时间来记录应用程序创建、访问或写入文件的时间。
资料来源: MSDN 文档-DateTime.ToFileTime 方法
你可使用:
Stopwatch.GetTimestamp();
你可改用以下方法:
在 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)) ); } }