File.OpenWrite добавляет вместо очистки содержимого? - PullRequest
49 голосов
/ 06 сентября 2010

Я использовал следующее для записи в файл:

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

Я заметил, что он просто правильно записывал в файл, но сначала не стер с него содержимое. Затем я решил просто использовать:

File.WriteAllBytes(FileName, Contents);

Это сработало нормально.

Однако, почему File.OpenWrite не удаляет содержимое файла автоматически, как другие языки, которые я использовал, для их функции стиля OpenWrite и вместо добавления добавляется?

Есть ли способ сделать это?

Ответы [ 2 ]

77 голосов
/ 06 сентября 2010

Это заданное поведение для 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 , чтобы сделать это напрямую.

22 голосов
/ 06 сентября 2010

Да, вы правы. File.OpenWrite не перезаписывает файл.

Файл File.Create используется для перезаписи файла, если он существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...