2014-09-29 109 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