web-dev-qa-db-ja.com

System.IO.Exceptionエラー:「要求された操作は、ユーザーマップセクションが開いているファイルでは実行できません。」

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)関数を呼び出したときにエラーが発生しました。

何が起こったのでしょうか?

36
Bryan Denny

別のプロセスがファイルマッピング(共有メモリ)APIを使用してファイルを開いていたようです。

Process Explorerの検索機能は、ユーザーに通知できるはずです。

41
Richard

書き込もうとしているファイルは、コードまたは別のプロセスによって、どこかですでに開かれているようです。

エディターでファイルを開いていますか?それを読み取る他のコードがありますが、閉じるのを忘れていますか?

Process Explorer を使用して、どのプロセスでファイルハンドルを開いているかを確認できます-Find/Find handle or DLL...コマンド。

10
RichieHindle

デバッグ中にプロジェクトからファイルを除外してみてください。 XMLファイルを保持しているのは実際にはVS2010であることがわかりました。ソリューションエクスプローラーで[すべてのファイルを表示]を選択して、デバッグ後のXMLファイルを確認できます。

ロックは、複数の書き込みを行うときに問題を停止します。

lock(file){ write to file code here }
7
VipX1