将文本文件的多个修订版存储到单个文件的最佳方法

时间:2010-07-18 18:17:14

标签: c#

我正在开发一个C#应用程序,它需要将给定报告文件的所有连续修订存储到单个项目文件中:每次(纯文本)报告文件更改时,都应附加新版本的内容到项目文件,以及一些元数据。其他要求:

  • 报告文件的每个版本都是100 kB到1 MB。从理论上讲,修改的最大数量是无限的,但在实践中应该小于1000。
  • 为了简单起见,我想避免计算报告修订版之间的差异 - 只需在每次更改时将整个报告存储到项目文件中。
  • 项目文件应该被压缩 - 它不需要是文本文件
  • 应该很容易从应用程序中检索给定版本的报告

如何以有效的方式实现这一目标?我应该创建自定义二进制文件,考虑使用数据库,其他想法吗?

非常感谢,盖伊。

6 个答案:

答案 0 :(得分:4)

简单的工作流程出了什么问题?

  1. 取消gzip文件
  2. 附加标题和新报告
  3. Gzip项目文件
  4. Gzip是一种标准格式,因此很容易访问。后续报告可能不会有太大变化,因此您将获得很高的压缩率。要提交每个报告,只需打开文件并扫描标题即可。 (如果扫描不起作用,也会镜像SQLite数据库中的元数据,并确保在项目文件中包含偏移量,以便您可以快速找到正确的位置。)

    如果您的要求是灵活的(例如“应附加”部分)并且您只是想要跟踪文件的过去版本,revision control system将很容易地完成您需要的所有内容。

答案 1 :(得分:3)

无需实现。我建议你使用源代码控制。我个人使用subversionTortoiseSVN客户端。还有一个插件将Subversion与Visual Studio VisualSVN集成在一起。看看他们。

答案 2 :(得分:2)

我认为,当已经存在数十个(如果不是数百个)基本上设计用于完成此项目的系统时,自己有很多建议 - 源控制系统。

我建议选择一些绑定到C#的源代码控制解决方案并将文档存储在那里。然后,您可以轻松检查文档的任何修订。如有必要,您还可以进行差异化,分支等。

举一个例子来帮助您入门,您可以将SubversionC# bindings一起使用。

答案 3 :(得分:2)

您可以使用alternate data streams存储文件的旧版本。 .NET框架中没有内置支持,但是存在一些辅助类和文章,如herehere

我自己从未使用过这个,所以我无法确定这是不是一个好选择。但似乎它会成为一个优雅的解决方案,因为您可以将每个文件版本存储在单独的数据流中,而只将当前版本存储在“主文件”中。无论如何,它可能只适用于NTFS驱动器。

答案 4 :(得分:2)

如果使用SVN不是一个选项,您只需将每个修订版存储在单个文件中(例如,文件名代表日期)。您也可以为元数据使用单独的文件。然后将所有上述文件压缩成一个文件(例如,查看http://DotNetZip.codeplex.com/)。

答案 5 :(得分:1)

我认为已经SVN(或其他源代码控制系统)是一个非常好的主意,因为源代码控制似乎具有您需要的功能。但如果这不是一个选项,您可以使用SQL Server Compact EditionSQLite等文件数据库。

相关问题