【问题标题】:Count number of files in a Zip File with c#使用 c# 计算 Zip 文件中的文件数
【发布时间】:2011-01-24 18:02:53
【问题描述】:

我正在生成一些 .csv 文件,我需要将其压缩到一个 Zip 文件中。好的,我有一个框架可以做到这一点,可能一切都会好起来的。

但是!正如 TDD 所说,在我进行一些测试之后,我就可以编写代码了!

我的第一个测试听起来很简单,但我在读取 Zip 文件时遇到了一些问题,有人知道计算 zip 文件中文件数量的简单方法吗?

【问题讨论】:

  • 你说你有一个框架,我认为这意味着一个允许你创建 zip 文件的 zip 库。这不也读取 zip 文件吗?如果是这样,那么您应该能够加载 zip 文件,然后直接获取计数,或者可能必须遍历虚拟目录结构才能获取计数(如果有的话)。这将取决于您的库的实现。如果您还没有图书馆,那么下面的其他人已经为您命名了一些。 :)
  • 好克里斯!我的库是一些遗留代码,但最初我会在主项目中继续使用她。但在我的测试项目中,我想确认我的代码完全符合我的要求。我正在使用 DotNetZip,很快我将发布我的代码。

标签: c# tdd zip


【解决方案1】:

您似乎在寻找类似DotNetZip 的东西。

int count;
using (ZipFile zip = ZipFile.Read(path))
    count = zip.Count;

【讨论】:

  • 您能推荐一些使用 DotNetZip 的简单计数示例吗?
【解决方案2】:

我认为你问的不是 TDD 问题,但我还是会回答。

[测试] 公共无效计数NumberOfFilesInZip() { var counter = new FileCounter("existing_archive_with_2_files.zip"); AssertEqual(2, counter.count()); }

现在,使用您选择的库,使FileCounter 工作。一旦它工作并且您通过了测试,如果您愿意,请重构代码,以便它使用模拟框架来模拟对 zip 库的调用。现在您不再依赖文件系统了。 (我可能不会走这么远,除非你的测试被磁盘 I/O 拖慢了太多)

【讨论】:

  • 谢谢@bcarlso!我理解 I/O 的问题,但在这种情况下,我真的想要某种将文件保存在磁盘中的集成测试。我只是在使用 mock 从数据库中获取虚假数据。
【解决方案3】:

【讨论】: