在C#中创build一个空文件

在C#/ .NET中创build空文件的最简单/规范的方法是什么?

目前我能find的最简单的方法是:

System.IO.File.WriteAllLines(filename, new string[0]); 

只使用File.Create将打开文件,这可能不是你想要的。

你可以使用:

 using (File.Create(filename)) ; 

这看起来有点古怪,介意你。 你可以使用大括号代替:

 using (File.Create(filename)) {} 

或者直接调用Dispose

 File.Create(filename).Dispose(); 

无论哪种方式,如果你打算在不止一个地方使用它,你应该考虑用辅助方法来包装它,例如

 public static void CreateEmptyFile(string filename) { File.Create(filename).Dispose(); } 

请注意,直接调用Dispose而不是使用using语句在这里并没有太大的区别,只要我可以告诉它 – 唯一的办法就是如果线程在调用File.Create和调用之间中止Dispose 。 如果这种竞争条件存在,我怀疑它也将存在于using版本中,如果线程在File.Create方法的最后被中止,就在返回值之前…

 File.WriteAllText("path", String.Empty); 

要么

 File.CreateText("path").Close(); 
 System.IO.File.Create(@"C:\Temp.txt"); 

正如其他人指出的那样,你应该处理这个对象,或者把它包装在一个空的using语句中。

 using (System.IO.File.Create(@"C:\Temp.txt")); 

您可以将方法链接到返回的对象上,以便您可以立即closures刚才在一个语句中打开的文件。

 File.Open("filename", FileMode.Create).Close(); 

创build一个空文件的一个比较常见的用例是在没有更复杂的进程通信的情况下触发另一个进程中发生的其他事情。 在这种情况下,从外界的angular度来看,文件创build可以是primefaces的(特别是当被触发的东西要删除文件来“消耗”触发器时)。

所以它可以帮助创build一个垃圾名称(Guid.NewGuid.ToString())在您想要创build的文件相同的目录中,然后从临时名称到所需的名称执行一个File.Move。 否则,触发代码检查文件是否存在,然后删除触发器,可能会遇到文件在完全closures前被删除的争用条件。

将临时文件放在同一个目录(和文件系统)中,可以为您提供所需的primefaces性。 这给了一些像。

 public void CreateEmptyFile(string path) { string tempFilePath = Path.Combine(Path.GetDirectoryName(path), Guid.NewGuid.ToString()); using (File.Create(tempFilePath)) {} File.Move(tempFilePath, path); } 

为避免意外覆盖现有文件,请使用以下命令:

 using (new FileStream(filename, FileMode.CreateNew)) {} 

…并处理如果文件已经存在就会发生的IOException。

其他答案中build议的File.Create将覆盖文件已经存在的内容。 在简单的情况下,你可以使用File.Exists()来缓解这个问题。 然而,在多个线程和/或进程试图同时在同一文件夹中创build文件的情况下,需要更强大的function。

Path.GetTempFileName()将创build一个唯一命名的空文件并将path返回给它。

如果你想控制path,但得到一个随机的文件名,你可以使用GetRandomFileName来返回一个文件名string,并将其与Create

例如:

 string fileName=Path.GetRandomFileName(); File.Create("custom\\path\\" + fileName);