python - 使用 shutil.rmtree 删除后立即使用 os.makedirs 创建目录时出错
问题描述
当尝试在删除后立即创建一个新的(深层)目录(在本地 ssd 上)时,Python 3.6 会PermissionError
在该os.makedirs(dirName)
行中报告 a。解决此问题的唯一方法是sleep
在删除目录后等待 1 秒钟,然后就没有错误了。我是否以错误的方式使用 API,这是 Python 问题还是可能是什么?
例子:
dirName = "a/b/c"
if os.path.isdir(dirName):
shutil.rmtree(dirName)
#time.sleep(1)
os.makedirs(dirName)
错误:
File "C:\Program Files\Python37\lib\os.py", line 221, in makedirs
mkdir(name, mode)
PermissionError: [WinError 5] Access is denied: '...'
File "C:\Program Files\Python37\lib\os.py", line 221, in makedirs
mkdir(name, mode)
PermissionError: [WinError 5] Access is denied: '...'
解决方案
您的代码看起来不错,但是,您收到此错误可能有几个原因:
在网络驱动器上,文件操作必须通过网络同步,不幸的是,这有时可能会导致此类问题。轻微的延迟(和/或其他重试机制)是一种令人讨厌的变通方法,在这种情况下可能会解决问题。
如果目录正在使用中,则在相应的应用程序释放资源之前不能删除它。如果您在编辑器中打开了该目录中的任何文件,则该目录可以被使用。即使您关闭了文件,某些应用程序也会锁定目录(因此您应该关闭应用程序以释放目录)。另请注意,某些后台任务(例如,Tortoise SVN、备份实用程序或病毒扫描程序)可能会暂时锁定目录。
请注意,此行为可能在 Windows 和 Linux 之间有所不同。在 Linux 中,如果一个文件还在使用中被删除,低级文件句柄将一直有效,直到被相应的应用程序释放,但文件本身会被重命名为一些临时唯一的长文件名,所以你不会有这个问题。Windows 似乎以不同的方式处理它。
推荐阅读
- spring-boot - Spring MVC 可编辑表(Thymeleaf)
- python - 在特定位置在熊猫中添加新列
- wso2-am - 在 wso2 api manager 3.2.0 中将 api 生命周期状态更改为发布时出错
- matlab - Matlab 绘制位于每条曲线上的图例
- c++ - 具有概念化方法的类的显式实例化
- java - 在 Android 11 中将文件从路径复制到路径
- email - 使用我们公司域名的网络钓鱼电子邮件
- javascript - 有没有办法在使用 adonis websockets 时获得回调确认?
- mongodb - K8s 上的 MongoDB - 将新主机添加到来自不同 K8s 集群的副本集
- c++ - c ++为什么priority_queue更大<>结果与排序的更大结果不同?