将时间戳附加到文件名

发布于 12-11 23:13 字数 149 浏览 0 评论 0原文

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

I have come across this problem several times in which I would like to have multiple versions of the same file in the same directory. The way I have been doing it using C# is by adding a time stamp to the file name with something like this DateTime.Now.ToString().Replace('/', '-').Replace(':', '.').
Is there a better way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

长途伴2024-12-18 23:13:48

您可以使用 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(PM 或
AM)和 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)
            );
    }
}

You can use DateTime.ToString Method (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

or string.Format

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

or Interpolated Strings

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

There are following custom format specifiers y (year), M (month), d
(day), h (hour 12), H (hour 24), m (minute), s (second), f (second
fraction), F (second fraction, trailing zeroes are trimmed), t (P.M or
A.M) and z (time zone).

With Extension Method

Usage:

string result = "myfile.txt".AppendTimeStamp();
//myfile20130604234625642.txt

Extension method

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}
薄凉少年不暖心2024-12-18 23:13:48

我更喜欢使用:

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

ToFileTime() 做什么?

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

公共长ToFileTime()

Windows 文件时间是一个 64 位值,表示自 1601 年 1 月 1 日午夜 12:00 AD (CE) 协调世界时 (UTC) 以来经过的 100 纳秒间隔数。 Windows 使用文件时间来记录应用程序创建、访问或写入文件的时间。

来源:MSDN 文档 - 日期时间。 ToFileTime方法

I prefer to use:

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

What does ToFileTime() do?

Converts the value of the current DateTime object to a Windows file time.

public long ToFileTime()

A Windows file time is a 64-bit value that represents the number of 100-nanosecond intervals that have elapsed since 12:00 midnight, January 1, 1601 A.D. (C.E.) Coordinated Universal Time (UTC). Windows uses a file time to record when an application creates, accesses, or writes to a file.

Source: MSDN documentation - DateTime.ToFileTime Method

明媚殇2024-12-18 23:13:48

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

Perhaps appending DateTime.Now.Ticks instead, is a tiny bit faster since you won't be creating 3 strings and the ticks value will always be unique also.

像极了他2024-12-18 23:13:48

您可以使用以下代替:

DateTime.Now.Ticks

You can use below instead:

DateTime.Now.Ticks
ぃ双果2024-12-18 23:13:48

你可以使用:

Stopwatch.GetTimestamp();

you can use:

Stopwatch.GetTimestamp();
爱冒险2024-12-18 23:13:48

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

With the help of the answer from maf-soft I created my own solution, which can handle Pathes too.

So these are the unittests I use:

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");

The code (for copy&paste) looks like this:

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

The code that works with my Framework (and is unittestable) looks like this:

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))
                );
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文