2014-09-29 113 views
2

有人可以向我解釋爲什麼shutil.rmtree拋出的錯誤說目錄不是空的?python shutil.rmtree拋出錯誤

Traceback (most recent call last): 
    File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "C:\Python27\lib\threading.py", line 763, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "W:\__init__.py", line 90, in makePatch 
    myprog.copy_data() 
    File "W:\myprog.py", line 143, in copy_data 
    self.cleanupTempDir() 
    File "W:\myprog.py", line 138, in cleanupTempDir 
    shutil.rmtree(self.TEMP_DIR) 
    File "C:\Python27\lib\shutil.py", line 247, in rmtree 
    rmtree(fullname, ignore_errors, onerror) 
    File "C:\Python27\lib\shutil.py", line 256, in rmtree 
    onerror(os.rmdir, path, sys.exc_info()) 
    File "C:\Python27\lib\shutil.py", line 254, in rmtree 
    os.rmdir(path) 
WindowsError: [Error 145] The directory is not empty: u'e:\\PatchData\\Data' 
+0

也許有一些外部進程不斷向該目錄添加新文件? – Yoel 2014-09-29 21:56:42

+0

nope,沒有外部進程正在寫入該位置。 – Thexder1 2014-09-29 22:16:55

+0

也許有一個隱藏的文件。嘗試在os.walk中輸入x(u'e:\\ PatchData \\ Data'):print x'。如果您打印了多個項目,則仍然有文件。 – tdelaney 2014-09-30 01:37:37

回答

1

看起來像文件被標記爲只讀。在複製文件後添加一行以刪除只讀標誌後,我不再收到此錯誤。奇怪的是,它看起來甚至沒有試圖刪除這些文件,或者至少沒有在文件上只提供目錄的任何例外。

+4

嗨Thexder,你添加了什麼行來刪除只讀標誌?對於分配給特定用戶的臨時文件夾,我得到同樣的錯誤。 – user3515225 2015-09-04 09:26:52

+0

你好,請你提供一點細節。在哪裏以及如何添加該行。它應該在shutil.py – slaveCoder 2016-04-11 04:20:31

+0

也許添加的行是os.chmod()?從[python doc](https://docs.python.org/3.5/library/os.html#os.chmod): 「儘管Windows支持chmod(),但您只能設置文件的只讀標誌(通過stat.S_IWRITE和stat.S_IREAD常量或相應的整數值),所有其他位都被忽略。 – solstice333 2016-07-11 07:24:01