[英]Append TimeStamp to a File Name
我多次遇到这个问题,我想在同一个目录中有同一个文件的多个版本。 我使用 C# 的方法是在文件名中添加一个时间戳,例如DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')
。 有一个更好的方法吗?
您可以使用DateTime.ToString 方法(字符串)
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(年)、M(月)、d(日)、h(12 小时)、H(24 小时)、m(分钟)、s(秒)、f(秒小数)、F (第二个分数,尾随零被修整)、t(下午或上午)和 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 起经过的 100 纳秒间隔数(公元 1601 年 1 月 1 日)协调世界时 (UTC)。 Windows 使用文件时间来记录应用程序何时创建、访问或写入文件。
也许附加DateTime.Now.Ticks
会快一点,因为您不会创建 3 个字符串,并且刻度值也将始终是唯一的。
我多次遇到此问题,希望在同一目录中拥有同一文件的多个版本。 我使用C#的方式是在文件名上添加时间戳,例如DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')
。 有一个更好的方法吗?
您可以使用:
Stopwatch.GetTimestamp();
您可以使用以下代替:
DateTime.Now.Ticks
在 maf-soft 的回答的帮助下,我创建了自己的解决方案,它也可以处理路径。
所以这些是我使用的单元测试:
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))
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.