无需解压缩即可访问压缩文件?
Posted
技术标签:
【中文标题】无需解压缩即可访问压缩文件?【英文标题】:access a zipped file without unzipping? 【发布时间】:2013-07-01 19:18:58 【问题描述】:我的程序在系统运行的每个小时都会生成一个信息日志,其中包含各种数据,例如访问时间、数据传输和遇到的任何故障/警告。不幸的是,这些日志文件的大小可以从 10,000KB 到 25,000KB 不等,所以一旦它们至少 24 小时,我就开始单独压缩它们,这样我的系统在任何时候都只有 24 个解压缩的日志文件。
我需要解决的问题是该软件的一部分是“诊断”窗口,用户可以在其中根据文件的创建时间从选定的日期范围加载日志文件,并以易于阅读的格式查看其内容.我知道,为了让文件出现在他们的搜索中,必须有一个例外允许检查 .zip,但我无法访问任何文件数据以查看所述 .zip 文件是否属于日期范围。
我的问题是:它们是我访问压缩文件信息(以及进一步扩展其内容)的一种方式,而无需解压缩文件、进行搜索、重新压缩文件?如果您的日期范围内只有 1 或 2 个文件,解压缩一百个或更多文件似乎工作量太大。
【问题讨论】:
使用文件的创建/修改时间... 了解压缩文件的作用可能会有所帮助 您可以看到 zip 头文件(文件名和大小),但要从特定文件中获取数据,您需要解压缩 【参考方案1】:您应该在每个压缩文件的文件名中添加一个时间戳。
通常,当您压缩文件时,您会将文件的实际数据转换为不可读的格式。大多数压缩算法(请记住,有很多)都在非常复杂的级别上工作,这就是为什么您确实需要解压缩文件以获取原始数据的原因。 (天下没有免费的午餐。)
幸运的是,文件不仅仅是一个文件!因为你是完全正确的,所以必须读取文件来处理它会很糟糕!想象一下,如果您必须读取每个文件以找出它在目录中的位置,则必须搜索文件系统。
有多种方法可以访问与您的文件关联的元数据,具体取决于您所使用的具体系统。例如,在 unix 风格的机器中,使用命令 ls -l
会得到最后编辑的信息。
也就是说,出于这个确切原因,日志文件的名称通常以时间戳开头。但是,如果您想保持文件名美观,则可能是最后编辑的日期。
【讨论】:
【参考方案2】:一个好的 zip 库(例如 SharpZipLib)应该允许您迭代存档中包含的文件而不提取它们。这将允许您查询关联的文件日期。例如,使用前面提到的 SharpZipLib,您只需检查存档中包含的 ZipEntry
对象的 DateTime 属性。
【讨论】:
我会争辩说,如果您实际上没有压缩或解压缩任何文件,那么像 SharpZibLib 这样的库是严重的矫枉过正。 大部分情况下不允许使用非内部库。许可问题,因为这是一款营利性软件以上是关于无需解压缩即可访问压缩文件?的主要内容,如果未能解决你的问题,请参考以下文章