2009-09-07 4 views
29

일부 CSV 파일을 가져 오기 위해 File.ReadAllText를 사용했지만 Excel에서 파일을 닫지 못할 때마다 응용 프로그램이 예외를 throw합니다 파일에 액세스하십시오.다른 응용 프로그램에 의해 잠긴 텍스트 파일을 읽는 가장 쉬운 방법

(나는 ReadAllText에서 READ 꽤 명확한 것 같다 의미, 나에게 미친 것 같다)

내가 File.Open 모든 종과 경적이 있지만, '아무튼에'중간 '방법이 있다는 것을 알고 버퍼와 char 배열을 어지럽히는 것?

예, 나는 '당신이 사용의 파일을 열기 위해 파일 공유 플래그를 지정하려면 당신에게, 나에게 먼저 답 :

답변

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에서 파일을 공유 읽기 공유 모드로 열어야합니다 (.NET의 FileShare 참조). 테스트를 거치지 않았으므로 Excel에서이 작업을 수행한다고 보증 할 수는 없습니다.

+0

감사합니다. 파일에서 전체 문자열을 가져 오기 위해 {} 사이에 넣을 수있는 가장 짧은 것은 무엇입니까? (내가 게으른다고 말했어) – Benjol

+0

@ Benjol : 문제 없습니다. 모든 텍스트를 읽을 수있는 코드로 업데이트되었습니다. – Noldorin

+0

@ Noldorin, 감사합니다. 그것은 누락 된 링크였습니다. FileStream에서 사용할 수있는 모든 메서드를 살펴 보았지만 이해할 수 없었습니다. – Benjol

0

을주고, 게으른, 그래서 저를 아래로 투표 File.Open()으로 다시 붙어 있습니다.

+1

파일을 여는 것은 Excel이므로 OP가이를 제어 할 수 없습니다. 그는 Excel이 읽기 - 공유 모드로 열리고 읽기 전용으로 열리 길 바랍니다. – Noldorin