【问题标题】:Writing to text file with specific date and time in the file name写入文件名中具有特定日期和时间的文本文件
【发布时间】:2015-10-20 01:59:03
【问题描述】:

我正在尝试将我的所有数据写入一个文本文件,除非我在文件名中输入DateTime,否则它正在工作。
当前代码如下所示:

string time = DateTime.Now.ToString("d");
string name = "MyName";
File.WriteAllText(time+name+"test.txt","HelloWorld");

我遇到了这个异常:

在 mscorlib.dll 中发生“System.IO.DirectoryNotFoundException”类型的未处理异常

但据我所知,File.WriteAllText() 方法应该创建一个新文件或覆盖已存在的文件。

有什么建议吗?

【问题讨论】:

  • 您的第一个参数不是有效的path。查看它的文档。

标签: c# filestream


【解决方案1】:

您可能需要确保路径有效并且日期时间字符串不包含无效字符:

string time = DateTime.Now.ToString("yyyy-MM-dd"); 

  // specify your path here or leave this blank if you just use 'bin' folder
string path = String.Format(@"C:\{0}\YourFolderName\", time);

string filename = "test.txt"; 

// This checks that path is valid, directory exists and if not - creates one:
if(!string.IsNullOrWhiteSpace(path) && !Directory.Exist(path)) 
{
   Directory.Create(path);
}

最后将数据写入文件:

File.WriteAllText(path + filename,"HelloWorld");

【讨论】:

  • 请查看我或 Maynak 的回答。当您要创建文件名时,不应使用取决于“快捷方式”的文化。
  • 仍然没有。无需进行目录检查。如果文件名有效,则文件将在调试模式下写入 bin 目录或在发布模式下写入程序文件夹。我们只需要确保文件名有效。
  • @Mayank 为什么你这么确定作者只想使用'bin'目录?如果他使用不存在的目录指定完整路径(他可能会这样),他会遇到异常。
  • 因为这不能回答 OP 的问题。 OP 询问为什么他在指定正确的(根据他的)文件名时会出现异常。他没有在他的问题中提到任何目录。所以我们可以放心地假设他知道在没有指定目录的情况下在哪里可以找到文件。为什么要把他和目录检查混为一谈?
【解决方案2】:

根据MSDN DateTime.Now.ToString("d") 看起来像这样:6/15/2008(编辑:根据您当地的文化,它可能会导致有效的文件名)

斜杠在文件名中无效。

【讨论】:

  • 虽然这是正确的(在 de-DE 文化中,它应该产生有效的格式 -> 15.06.2008)我猜想并说 Mystia 使用的文化使用的分隔符不是允许在文件名中。
【解决方案3】:

替换

string time = DateTime.Now.ToString("d");
File.WriteAllText(time+name+"test.txt","HelloWorld");

string time = DateTime.Now.ToString("yyyyMMdd_HHmmss"); // clean, contains time and sortable
File.WriteAllText(@"C:\yourpath\" + time+name + "test.txt","HelloWorld");

您必须指定整个路径 - 而不仅仅是文件名

【讨论】:

  • 虽然不使用完整路径并不完全“好”,但仅使用文件名仍应在“某处”创建该文件。 (一般在应用所在目录)
  • @Mystia fubo 最近编辑了他的答案并在文件路径前添加了一个“@”。将其添加到您的代码中或添加第二个反斜杠,因为您必须在 astring 中转义反斜杠。
【解决方案4】:

这是因为您的名称将解析为“7/29/2015MyNametest.txt”或其他包含无效字符的内容,具体取决于您机器的文化。我给出的示例显然不是有效的文件路径。我们必须删除斜杠 (/)。 Windows 上的文件名中不允许使用它们。

请参阅this 问题作为 Windows 和 Linux 上的综合文件命名指南。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多