2009-06-26 1 views
6

디스크의 특정 파일을 읽고 쓰는 (그러나 동기식으로) 응용 프로그램을 개발하고 있습니다. 그러나 파일 가져 방법 클수록 더 자주 나는 IOException가 다음 얻을 :'사용자 매핑 섹션이 열려있는 파일에서 요청한 작업을 수행 할 수 없으면 어떻게됩니까?'

요청한 작업 오픈 사용자 매핑 섹션 파일을 수행 할 수 없습니다.

발생하는가에서 : 당신이 볼 수 있듯이

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) 
    at System.IO.StreamWriter.CreateFile(String path, Boolean append) 
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) 
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding) 
    at System.IO.File.WriteAllText(String path, String contents, Encoding encoding) 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.Run(Form mainForm) 
    at TestApp.Program.Main() 

, 예외는 File.WriteAllText 내에서 발생합니다. 나는 예외가 동시 읽기 및 쓰기와 관련이 있다고 생각하여 파일에 대한 액세스를 제한하려고 시도했습니다. lockMutex은 예외를 방지하는 대신 예외 수를 늘리는 것으로 보입니다. 무슨 일이 벌어지고 있니? 이 예외는 정확히 무엇을 의미하며 어떻게 예방할 수 있습니까?

답변

0

나는 파일 (open, loop (writes), close)을 쓰고 있었지만 실수 한 후에는 rutine에 대한 호출을 복제했다 ... "결국 요청한 작업은 다음과 같은 파일에서 수행 될 수 없다. 사용자 맵핑 된 섹션이 열립니다. " 음, 두 번째 전화를 삭제하고 문제가 해결되었습니다. 같은 파일에 대해 두 개 (열림/닫음) 루틴이 너무 빨리 발생하는 것 같습니다. 일부 개발자는 gc를 호출 할 것을 제안합니다. 모든 I/O 작업을 올바르게 종료하는지 확인하십시오. 너무 빨리 완료 (열기, 루프 (쓰기), 닫기)를 수행하지 마십시오. 하나의 작업이 완료되면 두 번째 요청이 도착하는 동안 문제가 발생하는 것으로 보입니다.

+0

내 상황에서도 이와 같았습니다. 문제의 원인이 정확히 어디인지, 문제를 방지해야하는지는 확실하지 않습니다. – dbaw

0

하나의 스레드/프로세스로도 여전히 문제가 발생합니까?

그렇다면 스레딩 문제가 아닙니다.

그렇다면 뮤텍스/잠금을 올바르게 사용하지 않았을 수 있습니다. 어쩌면 여기에 관련 코드를 게시해야합니다.

+0

하나의 스레드가있는 프로세스가 하나뿐이므로 잠금 또는 뮤텍스가 필요하지 않습니다. 그러나이 프로세스가 방금 처리중인 파일 (액세스하는 판독기 또는 작성기)을 읽거나 쓰려고하면 어떻게됩니까? 또한 예외 메시지는 실제로 무엇을 의미합니까? – dbaw

+0

응답에 대한 응답이 나중에 추가되었습니다. 아니요, 바이러스 백신 프로그램이 실행되고 있지 않습니다. – dbaw

1

실시간 바이러스 검사 소프트웨어를 사용하도록 설정 했습니까?

파일 잠금 문제가 바이러스 검사 소프트웨어로 인해 발생한 것으로 밝혀졌습니다.

1

Visual Studio 디버거가 매듭을 짓고 PDB 파일을 잠그면이 메시지가 나타납니다.

귀하의 상황과 관련이 없지만 파일과 폴더의 잠금을 감지하고 제거 할 수있는 "Unlocker"라는 다운로드 가능한 유틸리티를 사용하여 파일이 잠겨 있는지 (그리고 무엇을) 확인할 수 있습니다.

6

첫 번째 해결 방법은 바이러스 백신을 해제하는 것입니다. 더 나은 방법으로 바이러스 백신의 검사 예외 목록에 폴더를 추가 할 수 있습니다.

0

내게는 수정을 위해 열 수없는 권한으로 수정 된 파일을 여는 다른 프로세스가있는 것 같습니다. 이것은 바이러스 백신, 온라인 백업, 온라인 파일 동기화 일 수 있습니다 ...

관련 문제