2016-01-11 33 views
5

üzerinde() `tempfile.mkstemp` tarafından oluşturulan bir dosyayı kaldırılamaz. Bunu bir geçici dosya oluşturmak ve kapatılması tempfile.NamedTemporaryFile() kullandığınızda otomatik olarak kaldırılır, ancakİşte benim örnek kod, Windows

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' 

: Python 3.4.4 kullanarak Windows XP üzerinde çalıştırmak zaman, aşağıdaki hatayı kaldırdı.

Neden Windows, mkstemp tarafından oluşturulan dosyaları kaldıramıyor? Nerede yanlış yapıyorum? the documentation itibaren

+0

önce onu kapatmayı deneyin mü? –

+0

@ IgnacioVazquez-Abrams: Huh? Onu nerede açtım? Mkstemp() 'sadece dosya oluşturmuyor mu? Kodumda 'open()' yoktur ve 'fname' bir string nesnesidir. –

+2

mkstemp() bir açık dosya tanıtıcısı olan bir ** tuple ** döndürdüğünü unutmayın. Bu tanıtıcıyı kapatmayıncaya kadar dosya kullanımdadır (başka bir işlemle: kendi isteğinizle). Os.remove() nasıl çalıştığından dolayı Windows'da çalışır (_On Windows, kullanımda olan bir dosyayı kaldırma girişiminde bir istisnanın kaldırılmasına neden olur; Unix'te, dizin girdisi kaldırılır, ancak dosyaya ayrılan depolama alanı değil. Orijinal dosya artık kullanımda olana kadar kullanılabilir.) –

cevap

10

:

Creates a temporary file in the most secure manner possible. [...]

[...]

mkstemp() returns a tuple containing an OS-level handle to an open file (as would be returned by os.open()) and the absolute pathname of that file, in that order.

fd, fname = mkstemp(suffix='.txt', text=True) 
os.close(fd) 
os.remove(fname)