wiem, że jeśli chcę, aby skopiować plik w Pythonie, ale nie zastąpi cel mogę użyć kodu jak poniżej:Skopiuj plik, ale nie zastępować, bez problemów TOCTTOU w Pythonie
if os.path.exists(dest):
raise Exception("Destination file exists!")
else:
shutil.copy2(src, dest)
Ale stan świata może się zmienić między czasem, który nazywam os.path.exists
, a czasem, który nazywam copy2
. Czy istnieje bardziej preferowany sposób kopiowania bez nadpisywania, prawdopodobnie w przypadku, gdy operacja kopiowania spowoduje zgłoszenie wyjątku, jeśli cel już istnieje?
'os.fdopen (FD)' może? – Zizouz212
Użycie 'shutil.copyfileobj (sf, f)' byłoby lepsze niż 'f.write (sf.read())', ponieważ nie odczytałoby całego pliku do pamięci –
Dziękuję wam obojgu! Wprowadziłem te zmiany. – Misandrist