1

私はmvcを使用し、ファイル名を取得してサーバーから削除するコントローラーを持っています。ローカルマシンでビジュアルスタジオ開発サーバーを使用すると、このページ(コントローラー)はファイルを正常に削除しますが、運用サーバーでは次のようになりますエラー:

The process cannot access the file 'filename' because it is being used by another process

System.IO.File.Delete(Server.MapPath("~/content/myFolder/" + id));

このコード行の前に、ファイルにアクセスしないカスタム要求検証を行うだけです。このファイルは、このページの直前に別のページによって保存されています。

実際、どのプロセスがこのファイルにアクセスしている可能性があるかを知りたいです。また、前のページ (コントローラー) のコードがこの問題を引き起こす可能性がある場合は? 私は検索しましたが、有用なものは何も見つかりませんでした。

4

2 に答える 2

1

アプリケーションのアプリケーション プールが実行される ID を確認してから、そのアカウントのアクセス許可を確認できます。ファイルをロックしたプロセスを確認するには、このリンクを試してください。

于 2013-10-07T10:42:00.997 に答える
0

IDisposable インターフェイスを実装するタイプのオブジェクトを使用する場合、オブジェクトがdispose不要になったらすぐにメソッドを呼び出す必要があります。

CLR のガベージ コレクターはスマートで、ガベージ コレクションを実行するときにリソースを解放します。しかし、問題は、制御が現在のスコープを離れるとすぐに、ガベージ コレクターがオブジェクトを収集しないことです。ただし、ジェネレーション 0 のメモリがいっぱいになるかcollect、コード内でメソッドを呼び出して強制すると収集されます。

リソースが不要になったらクリーンアップすることをお勧めします。

于 2013-10-07T08:01:45.810 に答える