Открыть файл ReadOnly - PullRequest
       0

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

39 голосов
/ 11 февраля 2011

В настоящее время я открываю файл, чтобы прочитать его:

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

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

Ответы [ 3 ]

99 голосов
/ 11 февраля 2011

Типичная проблема заключается в том, что другой процесс имеет файл, открытый для записи.Все стандартные методы File и конструкторы StreamReader открывают файл с помощью FileShare.Read.Это не может работать, что отрицает совместное использование записи.Вы не можете отрицать запись, другой процесс был первым и получил доступ на запись.Таким образом, вам будет отказано в доступе.

Вы должны использовать FileShare.ReadWrite, например так:

var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
using (var sr = new StreamReader(fs))
{
    // etc...
}

Остерегайтесь, что у вас все еще будет сложная проблема, вы читаетенаполовину записанный файл.Другой процесс сбрасывает данные в файл в случайные моменты времени, вы можете прочитать только половину строки текста.YMMV.

11 голосов
/ 11 февраля 2011

Если вы хотите открыть файл только для чтения, попробуйте это:

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

Обратите внимание на вызов File.OpenRead () .

3 голосов
/ 11 февраля 2011

Вы можете установить атрибут файла, вызвав File.SetAttributes

string path = Path.Combine(client._WorkLogFileLoc, "dump.txt");
FileAttributes curAttributes = File.GetAttributes(path);
File.SetAttributes(path, curAttributes | FileAttributes.ReadOnly);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...