Задача: записывать в файл данные из нескольких потоков.
При последовательной записи (режим Append) работает без ошибок.
_waitWriteHandler.WaitOne();
using (BinaryWriter bw = new BinaryWriter(new FileStream(Destination, FileMode.Append, FileAccess.Write, FileShare.Write)))
{
bw.Write(data);
}
_waitWriteHandler.Set();
А если сначала создать файл:
using (BinaryWriter bw = new BinaryWriter(new FileStream(Destination, FileMode.Create, FileAccess.Write, FileShare.None)))
{
bw.Write(new byte[destinationFileSize]);
}
И в разные места начать писать данные:
_waitWriteHandler.WaitOne();
using (BinaryWriter bw = new BinaryWriter(new FileStream(Destination, FileMode.Open, FileAccess.Write, FileShare.None)))
{
bw.BaseStream.Position = position;
bw.Write(data);
}
_waitWriteHandler.Set();
то выдает необработанное исключение, что файл уже используется другим процессом (причем дает часть данных записать, всегда по-разному).
Использую класс Thread и AutoResetEvent для синхронизации.
FileShare.None-- монопольный режим же, разве нет? да и вроде явно файл не закрываете после записи. – Alias May 03 '18 at 05:56