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

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

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

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

正如其他人指出的那样,您应该处理该对象或将其包装在空的using语句中。

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

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

or

File.CreateText("path").Close();

path . gettempfilename()将创建一个唯一命名的空文件并返回该文件的路径。

如果你想控制路径,但获得一个随机文件名,你可以使用GetRandomFileName返回一个文件名字符串,并使用它创建

例如:

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

只使用File。Create将使文件保持打开状态,这可能不是您想要的结果。

你可以用:

using (File.Create(filename)) ;

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

using (File.Create(filename)) {}

或者直接调用Dispose:

File.Create(filename).Dispose();

无论哪种方式,如果你打算在多个地方使用这个方法,你可能应该考虑将它包装在一个helper方法中。

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

注意,就我所知,直接调用Dispose而不是使用using语句并没有太大区别——唯一可能产生区别的方法是在调用File之间中止线程。Create和Dispose调用。如果该竞争条件存在,我怀疑它也会存在于使用版本中,如果线程在文件的最后终止。方法,在返回值之前…


您可以将返回对象的方法链接起来,因此您可以立即在一条语句中关闭刚刚打开的文件。

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

创建空文件的一个常见用例是,在没有更复杂的进程通信的情况下,触发在不同进程中发生的其他事情。在这种情况下,从外部世界的角度来看,让文件创建是原子的会有所帮助(特别是当被触发的东西将要删除文件以“使用”触发器时)。

因此,在与您想要创建的文件相同的目录中创建一个垃圾名称(Guid.NewGuid.ToString()),然后执行一个file,这可能会有所帮助。从临时名称改为您想要的名称。否则,检查文件是否存在并删除触发器的触发代码可能会遇到竞态条件,即在完全关闭文件之前删除文件。

将临时文件放在同一个目录(和文件系统)中可以获得所需的原子性。这就得到了。

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,这将发生在文件已经存在的情况下。

文件。Create(在其他回答中建议使用)将覆盖文件的内容(如果文件已经存在)。在简单的情况下,可以使用File.Exists()减轻这种情况。然而,在多个线程和/或进程试图同时在同一个文件夹中创建文件的场景中,更健壮的东西是必要的。