2009-06-26 20 views
6

私はディスク上の特定のファイルに多くの読み書きをしていますが、同時に同期しているアプリケーションを開発しています。しかし、ファイルが取得する方法を、より大きな、より頻繁に私はIOExceptionが以下の取得:'要求された操作が、ユーザーマップセクションが開いているファイルに対して実行できない場合はどうなりますか?'

要求された操作は はオープ​​ン、ユーザーマッピングされ セクションとのファイルで実行することはできません。

occuringから:

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

ファイル(オープン、ループ(書き込み)、クローズ)に書き込んでいましたが、間違いの後にルーティンへの呼び出しを複製しました... "結局、要求された操作はユーザーマップされたセクションが開きます。 さて、私は2番目の呼び出しを削除して、問題を解決しました。 同じファイル上の2つの(オープン/クローズ)ルーチンが次々に起こっているようです。 一部の開発者はgcを呼び出すことを提案しています。 すべてのI/O操作が正しく終了していることを確認してください。 完了(オープン、ループ(書き込み)、クローズ)をあまりにも早く実行しないでください。 1つの操作が完了すると、2つ目の要求が到着して問題がスローされます。

+0

私の状況ではこれもそうだったと思います。問題の原因がどこにあるのか、問題の予防方法は不明です。 – dbaw

0

これはまだ1つのスレッド/プロセスでも起こりますか?

もしそうなら、それはスレッドの問題ではありません。

もしそうでなければ、ミューテックス/ロックを正しく使用していないかもしれません。多分あなたはここに関連するコードを掲示するべきです。

+0

1つのスレッドで1つのプロセスしかないので、ロックやミューテックスは必要ありません。しかし、このプロセスが(それにアクセスしていた読者またはライターから)解放されているプロセスのファイルを読み込み(または書き込み)しようとするとどうなりますか?さらに、例外メッセージは実際にはどういう意味ですか? – dbaw

+0

回答は後で追加されました:いいえ、私は実行中のウイルス対策プログラムはありません。 – dbaw

1

リアルタイムのウイルススキャンソフトウェアが有効になっていますか?

ファイルロックの問題がウイルススキャンソフトウェアによって引き起こされた回数が失われました。

1

Visual Studioデバッガがノットを取得してPDBファイルをロックすると、このメッセージが表示されます。

状況に関係なく、ファイルとフォルダのロックを検出して削除できる「Unlocker」というダウンロード可能なユーティリティを使用して、ファイルがロックされているかどうかを確認できます。

6

最初の解決策は、ウイルス対策ソフトを無効にすることです。あなたのアンチウィルスのスキャン例外リストにフォルダーを追加することができます。

0

私には、変更のために開くことができないというアクセス許可を持つすべての変更されたファイルを開く他のプロセスがあるようです。これは、ウイルス対策、オンラインバックアップ、オンラインファイルの同期になる可能性があります...

関連する問題