开发者

File.OpenWrite appends instead of wiping contents?

开发者 https://www.devze.com 2023-01-14 20:35 出处:网络
I was using the following to write to a file: using(Stream FileStream = File.OpenWrite(FileName)) FileStream.Write(Contents, 0, Contents.Length);

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 th开发者_如何转开发e 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?


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.


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

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

0

精彩评论

暂无评论...
验证码 换一张
取 消