Вы можете добиться желаемого поведения следующим образом:
using (var fs = new FileStream("test.txt", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
using (var fs2 = new FileStream("test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
byte[] info = new UTF8Encoding(true).GetBytes("DEF_");
byte[] info2 = new UTF8Encoding(true).GetBytes("abc_");
for (int i = 0; i < 3; i++)
{
fs.Seek(0, SeekOrigin.End);
fs.Write(info, 0, info.Length);
fs.Flush();
fs2.Seek(0, SeekOrigin.End);
fs2.Write(info2, 0, info2.Length);
fs2.Flush();
}
}
Перед записью каждый указатель потока должен располагаться в конце.Это делается с помощью метода Seek
.
После записи необходимо сбросить буфер на диск.Это гарантирует, что поток находится в правильном состоянии перед началом следующей записи.Для этого используйте метод Flush
.
Когда вы создаете поток в его конструкторе, вы можете указать FileOptions.WriteThrough
.Согласно его описанию, промежуточный буфер не должен использоваться.Тем не менее, он по-прежнему не работает без метода Flush
.Возможно, эксперты объяснят причину.