2014-10-17 2 views
0

Windows 공유 폴더에서 UNC 경로로 파일 본문을 읽으려고하는데이 예외가 발생합니다. The process cannot access the file '\\<someIP>\logs\LogFiles\W3SVC1\u_ex141017.log' because it is being used by another process.
그러나이 파일은 실제로 어떤 프로세스에서도 잠그지 않습니다.공유 파일에 액세스 하시겠습니까?

var logFile = File.ReadAllText(logPath); 

var logFile = (string)null; 
using (var fileStream = new FileStream(logPath, FileMode.Open, FileAccess.Read, FileShare.Delete)) 
{ 
    using (var reader = new StreamReader(fileStream)) 
    { 
     logFile = reader.ReadToEnd(); 
    } 
} 

(모두 실패)

: 나는 파일을 읽기 위해이 코드를 사용하고

나는 등의 텍스트 편집기를 사용하여 내 PC에서 볼 수 있습니다

파일이 어떤 프로세스에 의해 정말로 잠겨 있지 않을 때이 예외가 발생할 수있는 이유는 무엇입니까?

답변

2

FileShare.Dlelete를 FileShare.ReadWrite로 변경해보십시오. 이렇게하면 파일을 다른 응용 프로그램에서 동시에 읽고 쓸 수 있습니다. 즉

var logFile = (string)null; 
using (var fileStream = new FileStream(logPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    using (var reader = new StreamReader(fileStream)) 
    { 
     logFile = reader.ReadToEnd(); 
    } 
} 
+0

FileShare.ReadWrite는 FileShare.Delete보다 액세스가 더 제한적이므로이 방법이 작동하지 않는다고 생각했습니다. 하지만 그렇습니다. 왜? – user626528

+1

사실 Delete와 ReadWrite는 완전히 다른 두 가지를 의미합니다. MSDN에서 : http://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.110).aspx ** 삭제 : ** 후속 파일 삭제를 허용합니다. ** ReadWrite : ** 읽기 또는 쓰기를 위해 파일을 여는 것을 허용합니다. –

관련 문제