File.OpenWrite appends instead of wiping contents?

C#File

C# Problem Overview


I was using the following to write to a file:

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

I noticed that it was simply writing to file file correctly, but didn't wipe the contents of the file first. I then decided to simply use:

File.WriteAllBytes(FileName, Contents);

This worked fine.

However, why doesn't File.OpenWrite automatically delete the contents of the file as the other languages i've used do for their OpenWrite style function, and have a instead of appending?

Is there any method to do this?

C# Solutions


Solution 1 - C#

This is the specified behavior for File.OpenWrite:

> If the file exists, it is opened for writing at the beginning. The existing file is not truncated.

To do what you're after, just do:

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

Your current call is equivalent to use FileMode.OpenOrCreate, which does not cause truncation of an existing file.

The FileMode.Create option will cause the File method to create a new file if it does not exist, or use FileMode.Truncate if it does, giving you the desired behavior. Alternatively, you can use File.Create to do this directly.

Solution 2 - C#

Yes you are right. File.OpenWrite does not overwrite the file.

The File.Create is used to overwrite the file if exists.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBlamView Question on Stackoverflow
Solution 1 - C#Reed CopseyView Answer on Stackoverflow
Solution 2 - C#Sachin ShanbhagView Answer on Stackoverflow