+class txfile(object):
+ def __init__(self, name, mode):
+ self.realname = name
+ self.tempname = name + ".new"
+ self.bk = open(self.tempname, mode)
+
+ def close(self, abort=False):
+ self.bk.close()
+ if abort:
+ os.unlink(self.tempname)
+ else:
+ os.rename(self.tempname, self.realname)
+
+ def read(self, sz=-1):
+ return self.bk.read(sz)
+
+ def write(self, data):
+ return self.bk.write(data)
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, *exc_info):
+ if exc_info[0] is not None:
+ self.close(True)
+ else:
+ self.close(False)
+