Я использую Python для записи блоков текста в файлы в единственной операции:
open(file, 'w').write(text)
Если сценарий прерван так, запись файла не завершается, я хочу не иметь никакого файла, а не частично полного файла. Это может быть сделано?
Запишите данные во временный файл и, когда данные будут успешно записаны, переименуйте файл в правильный файл назначения, например
f = open(tmpFile, 'w')
f.write(text)
# make sure that all data is on disk
# see http://stackoverflow.com/questions/7433057/is-rename-without-fsync-safe
f.flush()
os.fsync(f.fileno())
f.close()
os.rename(tmpFile, myFile)
Согласно документу http://docs.python.org/library/os.html#os.rename
В случае успеха переименование будет атомарной операцией (это требование POSIX). требование POSIX). В Windows, если dst уже существует, будет вызван OSError даже если это файл; возможно, не существует способа реализовать атомарное переименование, когда dst называет существующий файл
также
Операция может завершиться неудачей в некоторых вариантах Unix, если src и dst находятся в разных файловых системах.
Примечание:
Это может быть не атомарная операция, если src и dest находятся не в одной файловой системе
os. Шаг fsync
может быть пропущен, если производительность/реактивность важнее целостности данных в таких случаях, как отключение питания, крах системы и т.д.