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

Я использовал File.ReadAllText(), чтобы открыть файл CSV, но каждый раз, когда я забываю закрыть файл в Excel, приложение выдает исключение, потому что не может получить доступ к файлу.

(Мне это кажется безумным, я имею в виду, ЧТЕНИЕ в ReadAllText кажется довольно ясным)

Я знаю, что есть File.Open со всеми наворотами, но есть ли «промежуточный» метод, который не включает возиться с буферами и массивами символов?


person Benjol    schedule 07.09.2009    source источник


Ответы (2)


Думаю, вам просто нужно следующее:

using (var fileStream = new FileStream("foo.bar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var textReader = new StreamReader(fileStream))
{
    var content = textReader.ReadToEnd();
}

Параметр FileAccess.Read - это то, что важно, чтобы указать, что вы хотите только прочитать файл. Конечно, даже для этого файл должен быть открыт Excel в режиме чтения-совместного использования (см. Перечисление FileShare в .NET). Я не тестировал, поэтому не могу гарантировать, что Excel это сделает, хотя ожидал.

person Noldorin    schedule 07.09.2009
comment
Спасибо, что самое короткое, что я могу поместить между {}, чтобы получить всю строку из файла? (Я сказал, что был ленив) - person Benjol; 07.09.2009
comment
@Noldorin, спасибо. Это было недостающее звено. Я просмотрел все методы, доступные в FileStream, ничего не понял. - person Benjol; 07.09.2009
comment
@Noldorin: Для информации, я решил попробовать, вы должны включить аргумент FileShare.ReadWrite, чтобы заставить его работать с Excel. - person Benjol; 08.09.2009
comment
@Benjol: Думаю, в этом есть смысл. В любом случае полезно знать. - person Noldorin; 08.09.2009

Если вы хотите указать флаги общего доступа к файлам, чтобы открыть используемый файл, вы застряли с File.Open ().

person Philippe Leybaert    schedule 07.09.2009
comment
Файл открывает Excel, поэтому OP не может это контролировать. Он может только надеяться, что Excel откроет его в режиме общего доступа для чтения и сам откроет только для чтения. - person Noldorin; 07.09.2009