1

私は常にディレクトリを作成し、そこにいくつかのファイル(画像)を入れる機能を持っています。コードを初めて実行するときは、問題ありません。2回目(常に)、ディレクトリを削除する必要があるときにエラーが発生します(画像を入れるためにディレクトリを再作成したいため)。エラーは、「別のプロセスで使用されているため、プロセスはファイル '...' にアクセスできません」です。このファイルにアクセスする唯一のプロセスは、この関数です。ファイルを「残さない」機能のようなものです。

明確な解決策でこれを解決するにはどうすればよいですか?

ここにコードの一部があります:

String strPath = Environment.CurrentDirectory.ToString() + "\\sessionPDF";
if (Directory.Exists(strPath))
      Directory.Delete(strPath, true); //Here I get the error
Directory.CreateDirectory(strPath);
//Then I put the files in the directory
4

5 に答える 5

2

コードまたは別のプロセスが画像を提供している場合、画像は無期限にロックされます。IIS の場合は、サービスが提供されている間、短時間ロックされます。これについてはよくわかりませんが、Explorer が画像のサムを作成している場合、作成中にファイルがロックされることがあります。ほんの一瞬かもしれませんが、コードとそのプロセスが衝突すると、競合状態になります。

完了したら、必ずロックを解除してください。クラスが IDisposable を実装している場合、そのオブジェクトで大規模な作業を行っていない場合は、using ステートメントをラップします。

using (var Bitmap = ... || var Stream = ... || var File = ...) { ... }

...後でオブジェクトを閉じ、ファイルはロックされません。

于 2012-04-20T15:05:11.207 に答える
1

ファイルをダンプするコードを表示せずにここで手足を踏み出すだけですが、FileStreamsまたはBitmapオブジェクトを使用している場合は、2 番目の方法を実行する前に、これらのオブジェクトをすべて適切に破棄していることを再確認します。

于 2012-04-20T15:01:49.780 に答える
0

この場合の唯一の明確な解決策は、誰がディレクトリへのアクセスを処理しているかを追跡し、そのアクセスを解放してバグを修正することです。

アクセスを処理するオブジェクト/リソースがサードパーティである場合、または何らかの方法で変更またはアクセスできない場合は、アーキテクチャを修正して、別の方法で IO アクセスを処理する必要があります。

お役に立てれば。

于 2012-04-20T15:01:48.270 に答える
0
  • ウイルス スキャナが新しいファイルをスキャンして、ファイルが削除されないようにするケースを見てきましたが、その可能性は非常に低いです。

  • .DisposeすべてのIDisposableオブジェクトを確認し、削除するディレクトリに何も変更されていないことを確認してくださいEnvironment.CurrentDirectory

于 2012-04-20T15:07:21.593 に答える
0

ファイルの作成時にファイルハンドルを解放していないようです。using ステートメント内ですべての IO を実行してみてください。そうすれば、ファイルは終了時に自動的に解放されます。

http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.80%29.aspx

于 2012-04-20T15:02:47.103 に答える