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を使用してファイルを開いていたようです。
Process Explorerの検索機能は、ユーザーに通知できるはずです。
書き込もうとしているファイルは、コードまたは別のプロセスによって、どこかですでに開かれているようです。
エディターでファイルを開いていますか?それを読み取る他のコードがありますが、閉じるのを忘れていますか?
Process Explorer を使用して、どのプロセスでファイルハンドルを開いているかを確認できます-Find
/Find handle or DLL...
コマンド。
デバッグ中にプロジェクトからファイルを除外してみてください。 XMLファイルを保持しているのは実際にはVS2010であることがわかりました。ソリューションエクスプローラーで[すべてのファイルを表示]を選択して、デバッグ後のXMLファイルを確認できます。
ロックは、複数の書き込みを行うときに問題を停止します。
lock(file){ write to file code here }