删除临时文件时为什么会出现WindowsError?

时间:2009-09-24 08:10:28

标签: python temporary-files

  1. 我创建了一个临时文件。
  2. 在创建的文件中添加了一些数据。
  3. 保存,然后尝试删除它。
  4. 但我得到了WindowsError。我在编辑后关闭了文件。如何检查哪个其他进程正在访问该文件。

    C:\Documents and Settings\Administrator>python
    Python 2.6.1 (r261:67517, Dec  4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import tempfile
    >>> __, filename = tempfile.mkstemp()
    >>> print filename
    c:\docume~1\admini~1\locals~1\temp\tmpm5clkb
    >>> fptr = open(filename, "wb")
    >>> fptr.write("Hello World!")
    >>> fptr.close()
    >>> import os
    >>> os.remove(filename)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    WindowsError: [Error 32] The process cannot access the file because it is being used by
           another process: 'c:\\docume~1\\admini~1\\locals~1\\temp\\tmpm5clkb'
    

3 个答案:

答案 0 :(得分:11)

来自documentation

  

mkstemp()返回一个元组,该元组包含一个打开文件的操作系统级句柄(如os.open()所返回的)以及该文件的绝对路径名。版本2.3中的新功能。

因此,mkstemp同时返回的OS文件句柄和临时文件的文件名。当您重新打开临时文件时,原始返回的文件句柄仍然打开(没有人阻止您在程序中打开两次或更多相同的文件)。

如果您想将该OS文件句柄作为python文件对象操作,您可以:

>>> __, filename = tempfile.mkstemp()
>>> fptr= os.fdopen(__)

然后继续使用正常代码。

答案 1 :(得分:6)

该文件仍处于打开状态。这样做:

fh, filename = tempfile.mkstemp()
...
os.close(fh)
os.remove(filename)

答案 2 :(得分:0)

我相信你需要释放fptr来干净地关闭文件。尝试将fptr设置为None。