将TimeStamp附加到文件名

时间:2011-10-26 03:19:33

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

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

6 个答案:

答案 0 :(得分:237)

您可以使用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)
            );
    }
}

答案 1 :(得分:14)

我更喜欢使用:

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

ToFileTime()做什么?

  

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

     

public long ToFileTime()

     

Windows文件时间是一个64位值,表示自公元1601年1月1日午夜12点(美国东部标准时间)协调世界时(UTC)以来经过的100纳秒间隔的数量。 Windows使用文件时间来记录应用程序何时创建,访问或写入文件。

来源:MSDN documentation - DateTime.ToFileTime Method

答案 2 :(得分:8)

或许附加DateTime.Now.Ticks可能会快一点,因为你不会创建3个字符串,并且ticks值也将始终是唯一的。

答案 3 :(得分:2)

你可以使用:

Stopwatch.GetTimestamp();

答案 4 :(得分:2)

以“当前日期和时间”作为文件系统上文件的名称。现在调用string.Format方法,并将其与DateTime.Now结合使用,以获取一种基于日期和时间输出正确字符串的方法。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        //
        // Write file containing the date with BIN extension
        //
        string n = string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin",
            DateTime.Now);
        File.WriteAllText(n, "abc");
    }
}

输出:

C:\Users\Fez\Documents\text-2020-01-08_05-23-13-PM.bin

"text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin"

text-所需输出的第一部分 文件将全部以文本开头-

{0:表示这是一个字符串占位符 零表示此处插入的参数的索引

yyyy-以四位数打印年份,后跟破折号 这有一个“ 10000年”的问题

MM-用两位数字打印月份

dd_用两位数字打印日期,后跟下划线

hh-用两位数字打印小时

mm-也以两位数字打印分钟

ss-如预期的那样,它将打印秒数

tt根据一天中的时间打印AM或PM

答案 5 :(得分:1)

您可以使用以下代码:

DateTime.Now.Ticks