2012-04-01 96 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

您應該調用系統文件刪除,然後檢查文件是否仍然存在。 (這是個玩笑,實際上並沒有這樣做:)) – 2012-04-01 05:33:38

+0

你是說在問題標題中'刪除'(兩次)而不是'檢測'? – 2012-04-01 07:00:51

+0

如果我正確理解你的問題,第一次是檢測(這是我希望找到答案的問題)。然後第二次是刪除(這我已經解決了 – Daniel 2012-04-01 12:06:01

回答

2

不一定可以確定文件刪除在Windows上是成功還是失敗。該文件可以在完全放寬的共享模式下打開,這意味着打開文件的另一次嘗試將成功(無論您請求何種訪問)。

判斷一個文件是否可以刪除的唯一方法是實際上試一下。

即使事先有準確的分辨方法,一旦您得到信息,它會立即過時。例如,在您致電list_locked_files後,程序可能會在該目錄中打開另一個文件,導致rmtree()失敗。