2009-09-07 4 views
29

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

(кажется сумасшедшим, чтобы мне, я имею в виду READ в ReadAllText кажется довольно ясно)

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

Да, я ленивый, поэтому голосовать меня, дайте мне ответ первый :)

ответ

45

Я думаю, что вы просто хотите следующее:

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 это сделает, хотя я бы и ожидал.

+0

Спасибо, какая самая короткая вещь, которую я могу поставить между {}, чтобы получить всю строку из файла? (Я действительно говорил, что я ленив) – Benjol

+0

@Benjol: Нет проблем. Обновлен с кодом, чтобы прочитать весь текст. – Noldorin

+0

@Noldorin, спасибо. Это недостающее звено. Я посмотрел на все методы, доступные в FileStream, не мог понять. – Benjol

0

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

+1

Это Excel, который открывает файл, поэтому OP не может контролировать это. Он может только надеяться, что Excel откроет его в режиме чтения и откроет его только для чтения. – Noldorin

Смежные вопросы