【问题标题】:python can't remove a file after closing it, "being used by another process"关闭文件后python无法删除文件,“正在被另一个进程使用”
【发布时间】:2009-12-06 21:42:43
【问题描述】:

我在读取文件后尝试删除文件,但收到“WindowsError: [Error 32] The process cannot access the file because it is being used by another process”

file = open(self.filePath)
for line in file:
        #do things
file.close()

os.remove(self.filePath) #throws error

os.rename(self.filePath, self.filePath + "old") #throws same error

有什么想法吗?

谢谢!

更新: 我刚刚重新启动了我的(windows 7)框,启动了 eclipse,将 os.remove("c:\file\file.txt") 移动到我的脚本的第一行,运行并得到了同样的错误。

更新 2: 我使用Windows资源管理器导航到文件..第一次我无法删除它,它被“系统”使用。第二次尝试删除工作正常。该文件不再存在。现在当我跑步时 os.remove("c:\file\file.txt") WindowsError:[错误 32] 进程无法访问该文件,因为它正被另一个进程使用:'c:\file\file.txt' 然后我查看 Windows 资源管理器,文件又回来了,是空的。我可以在资源管理器中删除,然后当我运行要删除的脚本时,它会引发错误(并创建空文件)。知道这里会发生什么吗?

更新 3: 我是一个白痴。 我在对象的初始化中打开文件 当我通过将“删除”移动到脚本顶部进行测试时,我应该把它放在顶部,而不是在创建我的对象之后

抱歉耽误了你的时间,我整个周末都在做一些明天到期的事情,当它无法运行时我很恐慌

【问题讨论】:

  • 抓取进程资源管理器或类似的东西,并尝试查看实际打开文件的内容。
  • 如果您在打开文件之前尝试将其删除,是否可行?
  • filePath 是目录吗?
  • filePath 是一个文本文件。我写的很好,就是删不掉
  • 硬编码文件路径在最好的时候并不是一个好主意。更糟糕的是:在反斜杠过载(路径分隔符和转义字符)的 Windows 上需要非常小心。 os.remove("c:\file\file.txt") 应该是 os.remove(r"c:\file\file.txt")os.remove("c:\\file\\file.txt")os.remove("c:/file/file.txt")

标签: python


【解决方案1】:

另一个可能性是病毒检查程序在您尝试删除或重命名文件时仍然打开文件。这种情况并不经常发生,但一旦发生,追踪起来真的很烦人。

【讨论】:

  • 我还看到病毒检查器经常搞砸这样的代码。我的建议是捕获 WindowsError,如果它因为文件正在使用而失败,请短时间休眠并重试。
【解决方案2】:

使用Unlocker(更简单)或Process Explorer 查看打开文件的程序是什么。

(根据Anon 的建议)

【讨论】:

    【解决方案3】:

    我现在在使用 access-AB 时遇到了同样的问题。 Process Explorer 显示 .. 'python.exe' 正在使用我希望删除的文件。我不能杀死 Python。这是一个烦人的解决方案。

    【讨论】:

      【解决方案4】:

      这有很多可能的原因。但是,最有可能的是您打开了一个包含该文件的目录窗口,或者最近关闭了此类窗口,而 Windows 尚未从其缓存中刷新该目录。尝试关闭您正在查看的任何目录窗口,然后重试。

      【讨论】:

      • 嗨..请参阅我的问题的更新。我刚刚重新启动 Windows,打开 Eclipse,将 os.remove 行移到脚本顶部,运行并得到相同的错误。在整个 Windows 会话中都没有打开资源管理器
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 2014-05-26
      • 1970-01-01
      相关资源
      最近更新 更多