【发布时间】:2015-09-17 20:48:25
【问题描述】:
因此,假设您有一个 python 模块 black_box,您将其导入到您的 python 脚本中。你向这个模块 black_box 传递一个文件路径,如下所示:
import black_box
import os
file_path = r"C:\foo.txt"
black_box.do_something(file_path)
os.remove(file_path)
有时 black_box 模块会打开该文件并使其保持打开状态,但我需要删除 black_box 已打开的该文件。
我在 Windows 上收到一条错误消息:
WindowsError: [错误 32] 进程无法访问该文件,因为它正在 被另一个进程使用:C:\foo.txt
如何关闭文件以便删除它?
我无法更改 black_box 模块。
我没有 black_box 创建的文件处理程序。
black_box 不提供关闭文件。
【问题讨论】:
-
模块是否提供关闭文件的方法?
-
你不能不访问 black_box 生成的文件句柄。
-
你需要杀死正在使用该文件的进程。
-
在 Windows 中,当打开文件或目录的句柄时,必须明确允许删除的意图。具体来说,
DeleteFile尝试打开一个共享删除访问权限的句柄,如果之前打开的句柄不共享删除访问权限,则会失败。您可以使用未记录的系统调用来列出进程中的文件句柄,然后关闭特定文件的句柄,但是 black_box 模块在尝试使用关闭的句柄时可能会崩溃。