2011-10-26 212 views
91

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

回答

208

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

我加'Path.GetDirectoryName(文件名)'得到文件的完整路径。然后用'Path替换'string.Concat()'。合并()'得到完整的文件名。 – gilu

8

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

11

我更喜欢使用:

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

ToFileTime()做了什么?

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

public long ToFileTime()

Windows文件时间是代表1月1日,1601 AD(CE)协调通用时间自午夜12:00时起已经过的100毫微秒的时间间隔的数目,一个64位的值(UTC )。 Windows使用文件时间来记录应用程序创建,访问或写入文件的时间。

来源:MSDN documentation - DateTime.ToFileTime Method

2

你可以使用:

Stopwatch.GetTimestamp(); 
+0

这个答案是你得到时间戳的方式!使用Path类将它附加到一个文件并且字符串操作根本不是问题。这只是DateTime.ToString方法(String)或string.Format(“{0:yyyy-MM-dd_hh-mm-ss-tt}”,DateTime.Now)的替代方案; – Joseph

1

您可以改为使用如下:

DateTime.Now.Ticks