繁体   English   中英

Append 文件名的时间戳

[英]Append TimeStamp to a File Name

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

您可以使用DateTime.ToString 方法(字符串)

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(下午或上午)和 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 使用文件时间来记录应用程序何时创建、访问或写入文件。

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

也许附加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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM