在C#中创建一个空文件

Pau*_*rth 177 .net c#

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

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

System.IO.File.WriteAllLines(filename, new string[0]);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 362

使用just File.Create会使文件保持打开状态,这可能不是你想要的.

你可以使用:

using (File.Create(filename)) ;
Run Code Online (Sandbox Code Playgroud)

看起来有点奇怪,请注意.您可以使用大括号:

using (File.Create(filename)) {}
Run Code Online (Sandbox Code Playgroud)

或者直接打电话Dispose:

File.Create(filename).Dispose();
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,如果您打算在多个地方使用它,您应该考虑将其包装在辅助方法中,例如

public static void CreateEmptyFile(string filename)
{
    File.Create(filename).Dispose();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 滑稽.我刚刚在5分钟前写了相同的代码.我做了File.Create(filename).Close(); 相同的差异...... (8认同)
  • 如果文件已经存在并且不是只读的,则文件内容将被覆盖,这一点可能并不明显。为避免这种情况,请使用 `using (new FileStream(filename, FileMode.CreateNew)) { }` (3认同)
  • 我的代码使用`using(File.Create(filename));`,但我喜欢`File.Create(filename).Dispose();的简单性. (2认同)
  • @user3791372:`Close()` 也会释放资源。`Close()` 只调用 `Dispose` - 见 https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/IO/Stream.cs#L234 (2认同)

Tam*_*ege 32

File.WriteAllText("path", String.Empty);
Run Code Online (Sandbox Code Playgroud)

要么

File.CreateText("path").Close();
Run Code Online (Sandbox Code Playgroud)

  • 使用第一个文件,文件长度为3个字节:编码代码.使用第二个文件是0字节(真的是空的). (2认同)
  • @Fil,“Encoding.UTF8”返回一个输出字节顺序标记(BOM)的编码器。您可以使用 new UTF8Encoding(false) 来获取不输出 BOM 的 UTF8 编码器。 (2认同)

Eoi*_*ell 20

System.IO.File.Create(@"C:\Temp.txt");
Run Code Online (Sandbox Code Playgroud)

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

using (System.IO.File.Create(@"C:\Temp.txt"));
Run Code Online (Sandbox Code Playgroud)

  • 不会更好地处置对象?例如:using(System.IO.File.Create(filepath)){} (4认同)

Phi*_*den 5

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

using (new FileStream(filename, FileMode.CreateNew)) {}
Run Code Online (Sandbox Code Playgroud)

...并处理如果文件已经存在将发生的 IOException。

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