Документация верна - но учтите, что open и append не являются синонимами.FileMode.OpenOrCreate
не перезаписывает файл, но поток начинается с начала файла, если он уже существует.Вы наблюдаете, что содержимое перезаписывается StreamWriter
, а не конструктором FileStream
, перезаписывающим файл.
Вы должны переместить позицию потока в конец файладобавить текст в конце.Для этого вы можете переместить позицию с помощью FileStream.Seek()
или изменить FileMode на FileMode.Append
. Однако , использование FileMode.Append
также требует сделать поток только для записи, а не для чтения-записи.
Вариант 1 (FileMode.OpenOrCreate
, FileAccess.ReadWrite
)
public Logger()
{
// Will create file if one does not exist, otherwise opens existing file
fs = new FileStream("log.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
// Set stream position to end-of-file
fs.Seek(0, SeekOrigin.End);
sw = new StreamWriter(fs, Encoding.UTF8);
}
Вариант 2 (FileMode.Append
, FileAccess.Write
)
public Logger()
{
// Will create file if one does not exist, otherwise appends to existing file
fs = new FileStream("log.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
sw = new StreamWriter(fs, Encoding.UTF8);
}