2014-02-11 25 views
0

尝试在文件写入时将日期包含到文件名中。将今天的日期保存到文件名

DateTime todaysDate = DateTime.Now; 
string destFile = System.IO.Path.Combine(targetPath + todaysDate.ToShortDateString() + ".dat"); 

错误:

Could not find a part of the path 'C:\Users\John\Desktop\Sales\Import11/02/2014.dat'. 

可以更改日期相隔_?或任何其他建议来解决这个问题? 钽

回答

4

这是最好的格式,其中你知道它会不会与文件路径冲突的方式,日期,下划线_或全部-或没有分隔更好的选择

string destFile = Path.Combine(targetPath, 
    String.Format("{0}.dat", todaysDate.ToString("dd-MM-yyyy"))); 
+0

一般来说,yyyy-MM-dd比dd-MM-yyyy好,因为它自然可以排序。 –

+0

您应该使用yyyy-MM-dd,因为您将能够按正确的顺序对文件进行排序。 –

+0

好点的家伙,但是,这不是问题... – James

0

尝试使用其他分隔符,如下划线_

todaysDate.ToString("dd_MM_yyyy_HH_mm_ss");

/不是一个文件路径的有效字符。您可以使用各种其他字符,只要它们对于文件路径不是非法的。

此MSDN参考应该有所帮助。

http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx

0

使用此:

DateTime todaysDate = DateTime.Now; 
string destFile = string.Format("{0}{1:yyyy_MM_dd}.dat" , targetPath, todaysDate); 
0

你可以试试这个:

var title = String.Format("NameOfYOuWant {0}.log", DateTime.Today.ToShortDateString().Replace('/', '-')) 
+2

这是不安全的方式来做到这一点,因为它仍然取决于当前的文化设置。 –

0

我建议:

  • 使用排序的日期格式,只是因为这是ñ令人愉悦的
  • 明确指定不变的文化,以避免使用不同的日历系统结束的怪异。 (我怀疑你总是希望使用的公历)
  • 显式指定分隔符,其不会引起文件系统路径问题(这/:做)

因此,像:

string name = string.Format(CultureInfo.InvariantCulture, 
          "Import-{0:yyyy-MM-dd}.dat", 
          DateTime.Today); 

// Assuming that targetPath is the directory; it's slightly unclear. 
string path = Path.Combine(targetPath, name); 

注:

  • 通过使用Today,您正在使用系统本地时区。这可能是你想要的,但你需要明确地考虑它。
  • 你只使用日期,而不是日期和时间 - 是绝对好吗?你会不会需要在同一天处理多个进口?