Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

File.OpenWrite appends instead of wiping contents?

Tags:

c#

file

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?

like image 269
Blam Avatar asked Sep 06 '10 17:09

Blam


1 Answers

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.

like image 192
Reed Copsey Avatar answered Sep 20 '22 11:09

Reed Copsey