Oto mój przykładowy kod:nie można usunąć plik, który utworzony przez `tempfile.mkstemp()` na Windows
import os
from tempfile import mkstemp
fname = mkstemp(suffix='.txt', text=True)[1]
os.remove(fname)
Gdy uruchomię go na moim Linuksie, to działa dobrze. Ale gdy uruchomię go na moim Windows XP przy użyciu Python 3.4.4, to podniósł się następujący błąd:
Traceback (most recent call last):
File "C:\1.py", line 5, in <module>
os.remove(fname)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\DOCUME~1\\IEUser\\LOCALS~1\\Temp\\tmp3qv6ppcf.txt'
Jednak kiedy używam tempfile.NamedTemporaryFile()
utworzyć plik temp i zamknąć go, to automatycznie usuwane.
Dlaczego system Windows nie może usunąć plików utworzonych przez mkstemp
? Gdzie robię źle?
Próbowałaś zamykając go w pierwszej kolejności? –
@ IgnacioVazquez-Abrams: Huh? Gdzie go otworzyłem? Czy nie jest "mkstemp()" wystarczy utworzyć plik? W moim kodzie nie ma 'open()', a 'fname' jest obiektem typu string. –
Należy zauważyć, że mkstemp() zwraca ** krotkę ** z uchwytem otwartego pliku. Dopóki nie zamkniesz tego uchwytu plik jest w użyciu (... przez inny proces: twój własny). Działa w systemie Windows z powodu działania os.remove() W systemie Windows próba usunięcia pliku, który jest w użyciu, powoduje zgłoszenie wyjątku, w systemie Unix pozycja katalogu jest usuwana, ale pamięć przydzielona do pliku nie jest dostępna. udostępniane do czasu, gdy oryginalny plik nie będzie już używany). –