У меня есть много процессов, читающих файл, хранящийся в общей сетевой папке. Первоначально я мог только один процесс, чтобы прочитать файл, все остальные будут генерировать исключения. Я реализовал следующий код, чтобы справиться с этим:
using (StreamReader fileStreamReader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
content = fileStreamReader.ReadToEnd();
}
Это позволяет нескольким процессам читать один и тот же файл, однако, похоже, что у него все еще есть проблемы, потому что иногда несколько процессов все еще не могут получить доступ к файлу. Тем не менее, я могу вернуться позже, когда файл не используется, и открыть его просто отлично. Прямо сейчас у меня есть некоторые попытки повторения со случайными задержками, которые до сих пор, кажется, помогают. Мне кажется немного странным делать это таким образом, так что может быть лучше?
Это странная часть, исключение, которое я получаю, вовсе не из файлового ввода-вывода, а из библиотеки CommStudio. Короче говоря, я выгружаю файл в строку, слегка изменяю его, выкидываю в поток памяти и отправляю его через ymodem на rs232. Исключение говорит мне, что удаленная система отменена. Устройство, получающее данные, сообщает, что произошла ошибка передачи, что обычно означает, что был получен неполный / пустой файл.
Обычно я бы обвинял библиотеку в этом, но она работает безупречно при настольном тестировании и когда к файлу обращается только один процесс. Единственное, что действительно кажется последовательным, это то, что он может потерпеть неудачу, когда несколько процессов обращаются к файлу.