Открыть файл ReadOnly
В настоящее время я открываю файл для чтения:
using (TextReader reader = new StreamReader(Path.Combine(client._WorkLogFileLoc, "dump.txt")))
{
//do stuff
}
Как я могу открыть файл в режиме ReadOnly, так что если другой процесс одновременно откроет файл, моя программа все равно сможет его прочитать.
Ответы
Ответ 1
Типичная проблема заключается в том, что в другом процессе файл открыт для записи. Все стандартные методы файлов и конструкторы StreamReader открывают файл с помощью FileShare.Read. Это не может работать, что отрицает обмен письмами. Вы не можете отрицать письменность, другой процесс был первым и получил доступ на запись. Таким образом, вам будет отказано в доступе.
Вам нужно использовать FileShare.ReadWrite, например:
var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using (var sr = new StreamReader(fs))
{
// etc...
}
Остерегайтесь, что у вас все еще будет сложная проблема, вы читаете полузаписанный файл. Другой процесс сбрасывает данные в файл в случайные моменты времени, вы можете читать только половину строки текста. YMMV.
Ответ 2
Если вы хотите открыть файл только для чтения, попробуйте следующее:
using (TextReader reader = new StreamReader(File.OpenRead(Path.Combine(client._WorkLogFileLoc, "dump.txt")))) {
//do stuff
}
Обратите внимание на вызов File.OpenRead().
Ответ 3
Вы можете установить атрибут файла, вызвав File.SetAttributes
string path = Path.Combine(client._WorkLogFileLoc, "dump.txt");
FileAttributes curAttributes = File.GetAttributes(path);
File.SetAttributes(path, curAttributes | FileAttributes.ReadOnly);