System.io.Exception 오류 : "사용자 매핑 된 섹션이 열린 파일에서 요청 된 작업을 수행 할 수 없습니다."

StackOverflow https://stackoverflow.com/questions/1302698

  •  19-09-2019
  •  | 
  •  

문제

XML 파일에 쓸 때 매우 이상한 ioexception을 받았습니다.

System.IO.IOException: The requested operation cannot be performed on a file with a user-mapped section open.

   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)
   at System.Xml.XmlTextWriter..ctor(String filename, Encoding encoding)
   at System.Xml.XmlDocument.Save(String filename)

XMLDocument의 Save (String) 함수를 호출했을 때 오류가 발생했습니다.

무슨 일이 있었는지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

파일 매핑 (공유 메모리) API를 사용하여 다른 프로세스가 파일을 열었던 것 같습니다.

프로세스 탐색기의 찾기 기능이 말할 수 있어야합니다.

다른 팁

코드 나 다른 프로세스에 의해 작성하려는 파일이 이미 다른 곳에서 열려있는 것처럼 보입니다.

편집기에 파일이 열려 있습니까? 그것을 읽는 다른 코드가 있지만 닫는 것을 잊어 버린 코드가 있습니까?

당신이 사용할 수있는 프로세스 탐색기 어떤 프로세스가 열린 파일 핸들이 있는지 알아 보려면 Find / Find handle or DLL... 명령.

디버그하는 동안 프로젝트에서 파일을 제외하십시오. XML 파일을 보유하고있는 것은 실제로 vs2010이라는 것을 알았습니다. 그런 다음 솔루션 탐색기에서 "모든 파일 표시"를 선택하여 XML 파일 게시물 디버그를 확인할 수 있습니다.

잠금은 여러 글을 수행 할 때 문제를 중지합니다.

lock(file){ write to file code here }

예를 들어 단단한 루프로 동일한 파일을 반복해서 열려고하면 OS 또는 프레임 워크가 실패 할 수 있습니다.

 while (true) {
   File.WriteAllLines(...)
 }

물론, 당신은 실제로 그렇게하고 싶지 않습니다. 그러나 코드의 버그로 인해 발생할 수 있습니다. 충돌은 코드 때문이 아니라 Windows 또는 .NET Framework의 문제입니다.

많은 파일을 매우 빨리 작성 해야하는 경우 thread.sleep ()로 약간의 지연을 추가 할 수 있습니다.

 while (i++<100000000) {
   File.WriteAllLines(...)
   Thread.Sleep(1);
 }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top