Почему WindowsError при удалении временного файла?
- Я создал временный файл.
- Добавил некоторые данные в созданный файл.
- Сохранено, а затем пытается удалить его.
Но я получаю 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 ответа
Из документации:
mkstemp () возвращает кортеж, содержащий дескриптор уровня операционной системы, в открытый файл (как было бы возвращено функцией os.open()) и абсолютный путь к этому файлу в указанном порядке. Новое в версии 2.3.
Так, mkstemp
возвращает как дескриптор файла ОС, так и имя временного файла. Когда вы снова открываете временный файл, оригинальный дескриптор возвращаемого файла все еще открыт (никто не мешает вам дважды или более открыть один и тот же файл в вашей программе).
Если вы хотите работать с этим дескриптором файла ОС как с файловым объектом Python, вы можете:
>>> __, filename = tempfile.mkstemp()
>>> fptr= os.fdopen(__)
и затем продолжите с вашим обычным кодом.
Файл все еще открыт. Сделай это:
fh, filename = tempfile.mkstemp()
...
os.close(fh)
os.remove(filename)
Я считаю, что вам нужно выпустить fptr, чтобы закрыть файл чисто. Попробуйте установить для fptr значение None.