Подтвердить что ты не робот

File.OpenWrite добавляет, а не очищает содержимое?

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

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

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

File.WriteAllBytes(FileName, Contents);

Это отлично работает.

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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