-1

我需要在运行时修改文本文件,但稍后恢复其原始状态(即使计算机崩溃)。

我的程序在常规会话中运行。会话结束后,可以更改该文件的原始状态,但原始状态在运行时不会更改。

此文本文件在多个目录中有多个具有相同名称的实例。我的程序在每个目录中运行(但不是并行运行),但根据目录内容,它会做不同的事情。像这样选择工作目录的顺序是完全任意的。

由于每个目录中的文件名相同,因此将备份文件存储在稍微不同的位置似乎是个好主意(即,可以将父目录名称附加到备份目标路径)。

我现在做的是用自写的类备份和恢复文件,并在启动时检查当前目录的先前备份是否正确恢复。但是我的实现需要认真重构,现在我很感兴趣是否已经为此类任务实现了库。

编辑

版本控制似乎是个好主意,但实际上它有点矫枉过正,因为它需要网络连接并且通常需要服务器。其他 VCS 需要安装客户端。我会更喜欢纯 python 解决方案,但至少它应该是跨平台的、可移植的并且足够小(例如<10mb)。

4

3 回答 3

2

实施版本控制......就像svn(参见pysvn),只要repo在同一台服务器上它应该很快......并且允许回滚到文件的任何版本......可能有点矫枉过正,但这将使一切都可逆

http://pysvn.tigris.org/docs/pysvn_prog_guide.html

你不需要服务器......你可以有本地版本控制,它应该没问题......

于 2012-09-05T16:44:43.457 回答
2

为什么不做每个 unix、mac、window 文件多年来所做的事情——创建一个锁定文件/工作文件的概念。

选择文件进行编辑时:

  1. 检查是否有活动锁或崩溃的备份。
  2. 如果文件被锁定或崩溃,请给出“恢复”选项
  3. 否则,开始编辑文件...

编辑往往会做以下几件事中的一项或多项:

  1. 将原始文件复制到“.%(filename)s.backup”
  2. 创建一个“.%(filename)s.lock”以防止其他人对其进行操作
  3. 完成编辑后,锁定消失并删除 .backup

有时事情会稍微颠倒一下,当 .backup 是活动编辑时,原始文件会保留在原位;成功后 .backup 将替换原始文件

如果您在 linux 机器上使 vi 或其他一些文本程序崩溃,您将看到这些文件已创建。请注意,它们通常有一个点 (.) 前缀,因此它们通常隐藏在命令行中。Word/Powerpoint/等都做类似的事情。

于 2012-09-05T17:12:28.280 回答
1

Git、Subversion 或 Mercurial 是您的朋友。

于 2012-09-05T16:46:12.923 回答