【问题标题】:Append TimeStamp to a File Name将时间戳附加到文件名
【发布时间】:2011-10-26 03:19:33
【问题描述】:

我多次遇到这个问题,我想在同一个目录中拥有同一个文件的多个版本。我一直在使用 C# 的方式是在文件名中添加一个时间戳,类似于 DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')。 有没有更好的方法来做到这一点?

【问题讨论】:

    标签: c# .net file datetime file-io


    【解决方案1】:

    您可以使用DateTime.ToString Method (String)

    DateTime.Now.ToString("yyyyMMddHHmmssfff")

    string.Format

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

    Interpolated Strings

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

    有以下自定义格式说明符 y(年)、M(月)、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)
                );
        }
    }
    

    【讨论】:

    • 我已添加 Path.GetDirectoryName(fileName) 以获取文件的完整路径。然后将string.Concat()替换为Path.Combine()获取完整文件名。
    【解决方案2】:

    我更喜欢使用:

    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 documentation - DateTime.ToFileTime Method

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你可以使用:

        Stopwatch.GetTimestamp();
        

        【讨论】:

        • 这回答了你获取时间戳的方式!。使用 Path 类将其附加到文件中,字符串操作根本不是问题。这只是 DateTime.ToString Method (String) 或 string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}",DateTime.Now); 的替代方法
        【解决方案5】:

        你可以用下面的代替:

        DateTime.Now.Ticks
        

        【讨论】:

          【解决方案6】:

          在 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))
                          );
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-31
            • 1970-01-01
            • 1970-01-01
            • 2021-08-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-28
            相关资源
            最近更新 更多