File.OpenWrite附加而不是擦除内容?

Bla*_*lam 52 c# file

我使用以下内容写入文件:

using(Stream FileStream = File.OpenWrite(FileName)) 
   FileStream.Write(Contents, 0, Contents.Length);
Run Code Online (Sandbox Code Playgroud)

我注意到它只是正确地写入文件文件,但没有先擦除文件的内容.然后我决定简单地使用:

File.WriteAllBytes(FileName, Contents);
Run Code Online (Sandbox Code Playgroud)

这很好.

但是,为什么File.OpenWrite不会像我使用的其他语言那样自动删除文件的内容,而是用于OpenWrite样式函数,而不是追加?

有没有办法做到这一点?

Ree*_*sey 82

这是File.OpenWrite的指定行为:

如果文件存在,则打开它以便在开头写入.现有文件未被截断.

要做你想做的事,就这样做:

using(Stream fileStream = File.Open(FileName, FileMode.Create)) 
   fileStream.Write(Contents, 0, Contents.Length);
Run Code Online (Sandbox Code Playgroud)

您当前的调用等同于使用FileMode.OpenOrCreate,它不会导致截断现有文件.

FileMode.Create选项将导致文件的方法来创建一个新的文件,如果它不存在,或者使用FileMode.Truncate如果这样做,给你所期望的行为.或者,您可以使用File.Create直接执行此操作.

  • 我只是认为这与我使用的大多数 IO 库存在一些不必要的差异,这些库通常将写入作为覆盖,然后使用不同的附加方法。感谢您提供有关如何实际打开和清除的信息,非常感谢。 (2认同)

Sac*_*hag 22

是的,你是对的.File.OpenWrite不会覆盖该文件.

File.Create使用是否存在覆盖该文件.