【问题标题】:Temporary file not deletable?临时文件不可删除?
【发布时间】:2018-11-04 07:21:52
【问题描述】:

我已经使用tempfile.mkstemp() 创建了临时文件,创建后,我在path 中获得了文件的唯一路径,现在我想删除临时文件。我的代码如下。

我已经访问过这个WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'new.dat' ,但没有解决我的问题。

代码

import os
import tempfile

path=tempfile.mkstemp('.png', 'bingo',
    'C:\\Users\\MuhammadUsman\\Documents\\PythonScripts\\Project')
os.unlink(path)

错误

PermissionError: [WinError 32] The process cannot access the file
because it is being used by another process:
'C:\\Users\\MuhammadUsman\\Documents\\PythonScripts\\Project\\bingois3q1b3u.png'

【问题讨论】:

  • 告诉我为什么投反对票的原因。仔细阅读问题。我已经尝试了许多可能的组合。不要在不阅读问题的情况下投反对票。
  • 临时文件如果通过tempfile 模块创建,通常会自动删除,因此您可能不需要手动尝试。
  • 嗯,您的问题是否可能是您试图访问“MuhammadUsman”用户目录中的文件?您是否可能在未使用您的用户名更新路径的情况下从 SO 上的另一篇文章中复制并粘贴该内容?
  • > 临时文件通常会自动删除自己...I'm afraid not.

标签: python file-permissions delete-file


【解决方案1】:

试试这个:这对我有用。

import os
import tempfile

fd,path=tempfile.mkstemp('.png', 'bingo', 'C:\\Users\\MuhammadUsman\\Documents\\Python Scripts\\Project')
os.close(fd)
os.unlink(path)

【讨论】:

  • 解释:Python 使用伪 POSIX _open 函数会导致问题,因为 Windows 在使用 FILE_SHARE_DELETE 模式时有点不一致。 Some related info on CPython bug tracker。基本上mkstempunlink使用的共享模式是不一致的,所以直到mkstemp的句柄关闭后才能打开文件删除。
【解决方案2】:

如果您只想获取唯一名称,请尝试此操作。这比上面的解决方案要好。无需删除该文件。文件将被自动删除。

import os
import tempfile

path=tempfile.NamedTemporaryFile(dir='C:\\Users\\MuhammadUsman\\Documents\\Python Scripts\\Project',suffix='.png').name

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多