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

时间:2010-09-06 17:05:07

标签: c# file

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

using(Stream FileStream = File.OpenWrite(FileName)) 
   FileStream.Write(Contents, 0, Contents.Length);

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

File.WriteAllBytes(FileName, Contents);

这很好。

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

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:77)

这是File.OpenWrite的指定行为:

  

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

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

using(Stream fileStream = File.Open(FileName, FileMode.Create)) 
   fileStream.Write(Contents, 0, Contents.Length);

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

FileMode.Create选项将导致File方法创建一个新文件(如果它不存在),或者使用FileMode.Truncate(如果存在),为您提供所需的行为。或者,您可以使用File.Create直接执行此操作。

答案 1 :(得分:21)

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

File.Create用于覆盖文件(如果存在)。