访问压缩文件而不解压缩?

时间:2013-07-01 19:18:59

标签: c# visual-studio-2010 zip winzip

我的程序每小时生成一个系统运行的信息日志,其中包含各种数据,如访问时间,数据传输和遇到的任何故障/警告。不幸的是,这些日志文件的大小可以是10,000KB到25,000KB,所以我一旦开始至少24小时就开始单独压缩它们,这样我的系统在任何时候都只有24个解压缩的日志文件。

我需要解决的问题是该软件的一部分是“诊断”窗口,用户可以根据文件的创建时间从选定的日期范围加载日志文件,并以易于阅读的格式查看其内容。据我所知,为了让文件显示在搜索中,必须有一个允许.zip检查的异常,但是我无法访问任何文件的数据,看看所说的.zip文件是否属于日期范围。

我的问题是:他们是否可以访问压缩文件的信息(并进一步扩展其内容),而无需解压缩文件,进行搜索,重新压缩文件?如果只有1或2个属于您的日期范围,那么解压缩一百个或更多文件似乎太多了。

2 个答案:

答案 0 :(得分:1)

您应该为每个压缩文件的文件名添加时间戳。

通常,当您压缩文件时,您将文件的实际数据放入不可读的格式。大多数压缩算法(请记住,有很多)工作在一个非常棘手的级别,这就是为什么你真的需要解压缩文件以获取原始数据。 (没有免费的午餐。)

幸运的是,文件不仅仅是一个文件!因为你是完全正确的,不得不阅读文件用它来做事情会很糟糕!想象一下,如果你必须阅读每个文件以找出目录中的位置,就必须搜索文件系统。

根据您所使用的确切系统,有多种方法可以访问与您的文件相关联的元数据。例如,在使用命令ls -l的unix风格的机器中,它将为您提供最后编辑的信息。

也就是说,由于这个原因,日志文件通常具有以时间戳开头的名称。如果你想保持你的文件名很漂亮,那么通过最后编辑的日期可能就好了。

答案 1 :(得分:1)

一个好的zip库(例如SharpZipLib)应该允许您迭代存档中包含的文件而不提取它们。这将允许您查询关联的文件日期。例如,使用前面提到的SharpZipLib,您只需要检查存档中包含的ZipEntry对象的DateTime属性。