设备上没有 space 后无法删除文件

can't delete a file after no space left on device

我正在几个硬盘上写一堆文件。我的所有文件都不能放在一个硬盘上,所以如果第一个文件超出 space,我会把它们写在下一个上。我抓住了 IOError 28 来解决这个问题。

我的确切问题是,当我尝试删除写入第一个磁盘的最后一个文件(不完整的文件)时,我得到一个我不完全理解的新异常。似乎 with-block 无法关闭文件,因为磁盘上没有 space。

我在 windows 并且磁盘已格式化为 NTFS。

有人能帮帮我吗

# Here's a sample code
# I recommend first to fill a disk to almost full with a large dummy file.
# On windows you could create a dummy file with
#   'fsutil file createnew large.txt 1000067000000'

import os
import errno

fill = 'J:/fill.txt'
try:
    with open(fill, 'wb') as f:
        while True:
            n = f.write(b"[=11=]")
except IOError as e:
    if e.errno == errno.ENOSPC:
        os.remove(fill)

这是回溯:

Traceback (most recent call last):
  File "nospacelef.py", line 8, in <module>
    n = f.write(b"[=12=]")
IOError: [Errno 28] No space left on device

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "nospacelef.py", line 8, in <module>
    n = f.write(b"[=12=]")
IOError: [Errno 28] No space left on device

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "nospacelef.py", line 11, in <module>
    os.remove(fill)
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'J:/fill.txt'

回答我自己的问题。

我向 python [1][2] 提交了错误。它已经在 3.3+ 中修复。我使用的 3.2 没有修复程序。我升级了我的 python 版本,所以我不再受这个问题的困扰。

[1] http://bugs.python.org/issue25202

[2] http://bugs.python.org/issue16597