2011-02-11 11 views
30

는 현재이 내가 파일을 열거야 어떻게 읽을 것입니다 :파일 열기 읽기 전용

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

을 내가 읽기 전용 모드로 파일을 열 수있는 방법 그래서 다른 프로세스는 동일한에서 열린 파일이있는 경우 시간, 내 프로그램은 여전히 ​​그것을 읽을 수 있습니다. 이 파일을 읽기 전용으로 열려면

+0

스트림을 읽기 모드로 열려고합니까? 또는 ReadOnly 파일 속성을 설정 하시겠습니까? –

+0

열어보기 ReadOnly – xbonez

+0

다른 프로세스가 파일을 열어 놓은 상태에서도 그 프로세스가 읽기 공유를 가능하게해야합니다. 다른 프로세스가 공유가 거부 된 파일을 열면 파일을 읽기 전용으로 열지도 못하게됩니다. 자세한 정보는 FileShare 열거 형 (또는 Win32와 동등)을 참조하십시오. – itowlson

답변

73

일반적인 문제는 다른 프로세스가 쓰기 위해 파일을 열었습니다. 모든 표준 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.

+0

감사합니다. 이것이 내가 찾고 있었던 것 같습니다. 내 프로그램이 파일을 읽는 방법을 처리하기 때문에 절반 씩 작성된 파일을 읽는 것이 문제가되지 않습니다. – xbonez

+0

저를 구해줬습니다! 필자가 말했듯이, 다른 모든 기능은 FileShare.Read로 시작됩니다. 나는 streanreader 함수의 다른 변형으로 알아 내려고 꽤 오랜 시간 이래로 노력했다 ...! –

3

당신은 File.SetAttributes

string path = Path.Combine(client._WorkLogFileLoc, "dump.txt"); 
FileAttributes curAttributes = File.GetAttributes(path); 
File.SetAttributes(path, curAttributes | FileAttributes.ReadOnly); 
11

를 호출하여 파일 속성을 설정할 수 있습니다,이 시도 :

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

공지 사항을 File.OpenRead()에 대한 호출을.

+0

젠장, 초 만에 이겼어. p +1. –

+0

저를 위해 일하지 않았습니다. 한스가 그랬어. – nawfal