2012-04-01 12 views
1

shutil.rmtreeを使用して特定のディレクトリを削除できるかどうかを調べる検出器を作成しようとしています。私は今部分的に動作する以下のように完成した部分コードを持っています。Python:Windows 7で検出できないディレクトリを検出する

このコードでは、ターゲットフォルダの下にある.exeファイルがまだ実行されているときに警告が表示されるようになりました。しかし、このコードは、フォルダの下にある特定のファイルがエディタによって開かれている場合(これは、ディレクトリを削除できないようにする別の原因です)、まだ警告にフラグを立てることはできません。どんな指導も高く評価されます。事前に感謝します

注:ロックされたファイルを確認するためにopenメソッドを使用しました。

def list_locked_files(dir): 

    isLocked = False 
    for name in os.listdir(dir): 
     uni_name = unicode(name) 
     fullname = dir + u'/' + uni_name 

     if os.path.isdir(fullname): 
      list_locked_files(fullname) 
     else: 
      try: 
       f = open(fullname, 'r+') 
       f.close() 
      except IOError: 
       print fullname + u' is locked!' 
       isLocked = True 
    if isLocked is True: 
     print u'Please close the files/dir above !' 
     sys.exit(0) 
+0

システムファイルdeleteを呼び出して、そのファイルがまだ存在するかどうかを確認するだけです。 (これは冗談ですが、実際にはこれをしないでください:) –

+0

質問タイトルで「検出」ではなく「削除」(両方の時間)を意味しましたか? –

+0

私はあなたの質問を正しく理解している場合、最初に検出することです(これは私が答えを見つけることを望む質問です)。その後、もう一度削除します(これはすでに解決済みです – Daniel

答えて

2

Windowsでファイルの削除が成功するか失敗するかは、必ずしも判断できません。ファイルは、完全に許可された共有モードで開くことができます。これは、ファイルを開く別の試行が成功することを意味します(要求の種類に関係なく)。

ファイルを削除できるかどうかを判断する唯一の方法は、です。これは実際にはです。

事前に正確に伝える方法があったとしても、情報を取得すると即座に期限切れとなります。たとえば、list_locked_filesを呼び出すと、そのディレクトリ内の別のファイルが開かれ、rmtree()が失敗する可能性があります。

関連する問題