FileStream: используется другой ошибкой процесса - PullRequest
9 голосов
/ 05 марта 2010

У меня есть два разных модуля, которым нужен доступ к одному файлу (один будет иметь доступ ReadWrite - другие только для чтения). Файл открывается с использованием следующего кода в одном из модулей:

FileStream fs1 = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.Read);

Проблема в том, что второй модуль не работает при попытке открыть тот же файл, используя следующий код:

FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read);

Нужно ли устанавливать здесь некоторые дополнительные параметры безопасности?

Ответы [ 3 ]

27 голосов
/ 05 марта 2010

В FileStream, который только ЧИТАЕТ файл, вам нужно установить его как

FileShare.ReadWrite

FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

в противном случае оригинальный FileStream не сможет записать обратно в него ... это просто залп назад и вперед между двумя потоками, убедитесь, что вы вернули то, что нужно другому

0 голосов
/ 05 марта 2010

При открытии второго FileStream также необходимо указать FileShare.Read, в противном случае он попытается открыть его с монопольным доступом и завершится неудачно, поскольку файл уже открыт

0 голосов
/ 05 марта 2010

вам нужно использовать filestreamname.Open (); и filestreamname.close (); команда при использовании двух файловых потоков, которые читают / записывают в один и тот же файл, потому что вы не можете читать и записывать в файл асинхронно

...