2009-09-07 14 views
29

Używam File.ReadAllText do przechwytywania plików CSV, ale za każdym razem, gdy zapominam o zamknięciu pliku w programie Excel, aplikacja zgłasza wyjątek, ponieważ nie może uzyskać dostęp do pliku.Najprostszy sposób na odczytanie pliku tekstowego zablokowanego przez inną aplikację

(wydaje się szalony do mnie, mam na myśli odczytywane ReadAllText wydaje się dość oczywiste)

wiem, że tam jest File.Open wszystkie wodotryski, ale jest tam „pośredni” metoda, która nie robi” t wiąże się z zakłócaniem działania buforów i tablic znaków?

Tak, jestem leniwy, więc głosować mnie, daj mi najpierw odpowiedź :)

Odpowiedz

45

myślę chcesz tylko następujące:

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 parametrem jest to, co jest ważne, aby wskazać, że chcesz tylko do odczytu pliku. Oczywiście, nawet aby to zrobić, plik musi zostać otwarty przez Excel w trybie read-share (zobacz enum w FileShare w .NET). Nie testowałem, więc nie mogę zagwarantować, że Excel to zrobi, chociaż oczekiwałbym tego.

+0

Dzięki, jaka jest najkrótsza rzecz, jaką mogę umieścić między {}, aby wyciągnąć cały ciąg z pliku? (Powiedziałem, że byłem leniwy) – Benjol

+0

@Benjol: Nie ma problemu. Zaktualizowano kodem, aby przeczytać cały tekst. – Noldorin

+0

@Noldorin, dzięki. To było brakujące ogniwo. Spojrzałem na wszystkie metody dostępne w FileStream, nie mogłem zrozumieć. – Benjol

0

Jeśli chcesz określić udostępniania plików flagi w celu otwarcia pliku, który znajduje się w użyciu,” utknął z File.Open().

+1

To Excel otwiera plik, więc OP nie może tego kontrolować. Może mieć tylko nadzieję, że Excel otworzy go w trybie odczytu-udostępnienia i sam go otworzy. – Noldorin