Я использую C#. Чтобы проиллюстрировать мою проблему, я упростил ее до 2 таймеров в приложении WinForms Desktop.Чтение файла при добавлении к другому потоку
Первый таймер случайным образом выбирает существующий текстовый файл, открывает его для добавления и записи строки до конца. Затем он закрыт.
Этот процесс вызывается повторно каждые несколько миллисекунд (или так).
Другой таймер также будет произвольно выбирать файл и пытаться его прочитать. Этот процесс также вызывается несколько раз в миллисекундах.
В конце концов, тот же файл адресуется обоими таймерами, и я получаю ошибку блокировки.
Теперь я дописать в файл, используя следующие строки кода:
using (FileStream stream = new FileStream(_folder + "\\manifest.log", FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
TextWriter newWriter = new StreamWriter(stream);
newWriter.WriteLine(_timestamp);
newWriter.Flush();
newWriter.Close();
}
и я прочитал файл, используя следующие строки кода:
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 0x1000, FileOptions.SequentialScan))
using (var sr = new StreamReader(fs, Encoding.UTF8))
{
string line;
while ((line = sr.ReadLine()) != null)
{
yield return line;
}
}
Проблема с общим доступом является то, что не работает, если я использую 'Append'.
Проблема с блокировкой файла заключается в том, что у меня не будет возможности узнать перед собой, какой файл будет заблокирован, поскольку они выбраны случайным образом.
Прежде чем я посмотрю на изменение своего кода для этого, я подумал, что увижу, есть ли у кого-нибудь умная идея о том, как это решить.
благодаря
Доброе утро, я должен проверить свой код перед публикацией! У меня есть FileShare.Read, установленный в FileShare.Write. -Какой ублюдок я! –
не бейте себя, вы задали законный вопрос –