Подтвердить что ты не робот

Открыть файл ReadOnly

В настоящее время я открываю файл для чтения:

 using (TextReader reader = new StreamReader(Path.Combine(client._WorkLogFileLoc, "dump.txt")))
{
    //do stuff
}

Как я могу открыть файл в режиме ReadOnly, так что если другой процесс одновременно откроет файл, моя программа все равно сможет его прочитать.

4b9b3361

Ответ 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);