python“file write()”方法保证数据是否已正确写入?

时间:2015-05-29 21:20:50

标签: python

我是python的新手,我正在编写脚本来修补文件,例如:

def getPatchDatas(file):
  f = open(file,"rb")
  datas = f.read()
  f.close()
  return datas

f = open("myfile.bin","r+b")
f.seek(0xC020)
f.write(getPatchDatas("mypatch.bin"))
f.close()

我想确保补丁已正确应用。 那么,如果没有引发错误/异常,是否意味着我100%确定补丁是否已正确写入?

或者用以下内容仔细检查是否更好:

f = open("myfile.bin","rb")
f.seek(0xC020)
if not f.read(0x20) == getPatchDatas("mypatch.bin"):
  print "Patch not applied correctly!"
f.close()

?? 感谢。

2 个答案:

答案 0 :(得分:0)

在单个过程中,它是。

在多个过程中(例如,一个过程正在写,另一个过程正在阅读。即使你确保它只能在通话后阅读"写","写"需要一些时间完成),您可能需要filelock

答案 1 :(得分:0)

不,它没有,但大致相反。这取决于它的重要性。

任何事情都可能出错 - 它可能是一个消费者硬盘,它在操作系统完成将数据写入磁盘时就会出现。它可能在内存中被破坏,并且损坏的版本被写入磁盘,或者在写入期间可能由于电气或物理问题而损坏磁盘。

它可能被Linux上的内核模块,Windows上的过滤驱动程序或FUSE文件系统提供程序拦截,它实际上不支持写入但是假装它没有写入任何内容。

它可能被破坏的Python安装搞砸了,其中异常不起作用或故意被黑客攻击,或文件对象monkeypatched,或意外运行在伪造支持文件但在其他方面相同的Python的不常见实现中。

这些原因导致服务器具有服务器级硬件,具有更高的温度和电气变化容差,错误检查和纠正内存(ECC),RAID控制器电池备份,ZFS校验和文件系统,不间断电源等。< / p>

但是,就普通人和低风险事情而言 - 如果写得没有错误,那就和书面一样好。仔细检查是有道理的 - 特别是因为它很容易。很高兴知道某些事情是否失败。