2010-07-18 56 views
4

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

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

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

非常感谢,盖伊。

回答

4

简单工作流程有什么问题?

  1. 取消gzip文件
  2. 追加头和新的报告
  3. Gzip已项目文件

Gzip已是一个标准的格式,所以这是很方便。随后的报告可能不会有太大的变化,所以你的压缩率会很高。要记录每个报告,只需打开文件并扫描标题即可。 (如果扫描不起作用,还要镜像SQLite数据库中的元数据,并确保将偏移量包含到项目文件中,以便您可以快速找到正确的位置。)

如果您的要求是灵活的“应该追加”部分),并且您只需要跟踪文件的以前版本,revision control system就可以轻松完成您所需要的所有功能。

2

当我们已经有几十个甚至几百个基本上完全是为了完成这个源代码控制系统而设计的系统时,我不认为自己有很多要点。

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

举一个例子,让你开始你可以使用SubversionC# bindings

3

无需执行该操作。我建议你使用源代码管理。我个人使用subversionTortoiseSVN客户端。还有一个将Subversion与Visual Studio集成的插件,VisualSVN。看看他们。

+0

我也想到了这一点,但我想提供一个独立的应用程序,不依赖于用户的PC上安装的其他应用程序。 – geschema 2010-07-19 18:49:33

2

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

我从来没有用过这个我自己,所以我真的不知道这是否是一个好的选择。但看起来,这将是一个优雅的解决方案,因为您可以将每个文件版本存储在单独的数据流中,并且只将当前版本存储在“主文件”中。无论如何,它可能只适用于NTFS驱动器。

2

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

+0

没有使用SVN不是一种选择,但感谢DotNetZip链接! – geschema 2010-07-19 18:53:12

1

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

相关问题