2011-02-10 20 views
0

ヘルスモニタリングを使用してファイルクリーンアップ機能を作成しました。別のプロセスからアクセスできないファイルを削除しています。だから、私はこれをチェックしたい。それはアクセスを維持していますか?アクセスできない場合は、このファイルを削除します。どのようにできるのか?ファイルがasp.netで使用されているかどうかを確認する方法

+3

エラー:このファイルはヒーローを使用しています(asp.net) –

+0

あなたはasp.netアプリケーションから(別のプロセスによって)ファイルが使用中であるかどうかをどのように知るのですか? =) – Rob

+1

私は英語がおそらくあなたの母国語ではないと思っていますが、それはあなたが疑問に思うほど意味がありません。ファイルがasp.netアプリケーションの一部であるかどうか、またはファイルがasp.netアプリケーションによってアクセスされているかどうかを確認できるかどうかを確認していますか? –

答えて

2

一つあなたがすることができるものではなく、ファイルがロックされているかどうかを確認しようとしている(これはチェックして削除しようとの間の時間に変更される可能性として)try/catchブロック内の削除の試みをラップです。

Dim filenameToDelete = "AFileThatsInuse.doc" 
Try 
    System.IO.File.Delete(filenameToDelete) 
Catch ex As IOException 
    ' Have some code here that logs the content of the exception to a log file, 
    'the Windows Event Log or sends an email - whatever is appropriate 
End Try 

generic Exceptionをキャッチするのではなく、私はIOExceptionをキャッチしました。これはあるので、あなたは、この例外を取得しますdocumentationFile.Deleteのための州際:

あなたはまだ/キャッチし、他の例外タイプを処理することもできますが、それは良いアイデアを「盲目的に」キャッチことはないと例外を処理

The specified file is in use.

-or-

There is an open handle on the file, and the operating system is Windows XP or earlier. This open handle can result from enumerating directories and files. For more information, see How to: Enumerate Directories and Files.

、より具体的なバリアントの1つではなく、

あなたはまたを書くために、それが失敗した場合、あなたは、ファイルが別の場所で既に開いていることを伝えることができopen the fileからの試みでした:

Try 
    System.IO.File.Open("AFileThatsInUse.doc", FileMode.Open, FileAccess.Read, FileShare.None) 
Catch ex as IOException 
    ' As before, what you do when you determine the file is in use is up to you 
End Try 

このコードは専用のファイルを開こうとするので、他の場合プロセスが既にファイルを開いている場合は、失敗してIOExceptionを投げます。

+0

情報に感謝しますが、私はこれが好きではありません。そう、別の方法があります。私はそれが使用しているかどうかをチェックしたい。 – zanhtet

+0

@zanhtet、VB.netにコードを変換しました。あなたが質問vb.netにタグを付けたことを思い出しました。私が答えて言ったように、*チェック*と*削除*の間で変更される可能性があるので、ファイルが削除前に使用されているかどうかを確かめる方法はありませんが、 File.Open'メソッドです。 – Rob

+0

お返事ありがとうございます。しかし、私はtry catch例外を使いたくありません。だから、 "if"を使ってチェックしたい。 – zanhtet

関連する問題