我可以想到的最天真,最糟糕的方式来replace文件的内容是:
f = open('file.txt', 'w') f.write('stuff') f.close()
很显然,如果这个操作在closures之前的某个时候失败了,那么您将丢失原始文件的内容,而不一定完成新的内容。
那么,完全正确的方法是什么(如果有的话)。 我想像是这样的:
f = open('file.txt.tmp', 'w') f.write('stuff') f.close() move('file.txt.tmp', 'file.txt') # dangerous line?
但是,这是完全primefaces和安全的? 什么是真正执行移动的正确命令。 如果我有一个打开连接到file.txt
另一个进程,我假设它将保持其指向原始文件的指针,直到closures。 如果另一个进程试图在移动中间打开file.txt
会怎么样?
我并不关心我的进程得到的文件的版本是什么,只要他们得到一个完整的,没有损坏的版本。
move
实现应该使用原子的rename
函数。 打开文件的过程将看到旧的或新的内容,没有中间状态。 如果一个进程已经打开了文件,它将在move
后move
访问旧版本。