【问题标题】:Browsing compressed files withtour decompressing them [closed]浏览压缩文件并解压缩它们[关闭]
【发布时间】:2019-03-23 00:50:29
【问题描述】:

我正在尝试用 C++ 编写一个程序,该程序应该能够浏览档案并在该档案中打开所需的文件。这是否可以在不解压缩正在浏览的文件(或者更确切地说是目录)的情况下完成? 目前我这样做是为了在 Unix 操作系统上工作,但最终目标也是在 Windows 上工作。因此,我们的目标是获得类似于使用“ls”命令获取文件列表并浏览目录(如 cd)的方法。 到目前为止,我发现的所有内容都可以列出存档中的所有文件(如 zipinfo 等),尽管我的目标不是一次列出所有文件,而是能够浏览目录。例如,如果我有 something.zip,其中有 2 个文件夹 - 文件夹 1 和文件夹 2,其中每个文件夹有 2 个文件 - 文件夹 1 和文件 2 和文件夹 1,文件夹 2 中的文件 4 和文件 4。 使用 zipinfo 我会得到类似的东西: 文件夹 1/文件 1 文件夹 1/文件 2 文件夹 2/文件 3 文件夹2/文件4

我只想看到这个: 文件夹1 文件夹2

然后可以从那里导航到每个文件夹。例如进入文件夹 1 并查看: 文件 1 文件2

如何使用 C++ 来完成?如果无法仅查看文件夹,我会很高兴有一些工具可以查看所有文件,并且我可以解析它们以仅显示文件夹并提供“浏览”功能。

编辑:我需要它使用尽可能多的压缩方法。

【问题讨论】:

  • 我觉得这里有些人只是毫无理由地对问题投反对票。
  • 这个问题有几个问题。您没有说明您正在使用哪个compression method(s) 作为初学者。然后,你问在 C++ 中是否可行。嗯,答案是肯定的。我不知道没有附带 C 库的压缩方法。您可能有也可能没有提供目录以帮助进行磁盘布局的标题结构。这取决于压缩方法。
  • @jww 当然,我重写了,我看不出这种迂腐行为的原因。至于压缩方法,它应该能够使用尽可能多的方法

标签: c++ unix archive


【解决方案1】:

这不是 C++ 解决方案,但如果您可以访问 zipinfo 并运行以下命令:

zipinfo -1 filename.zip

这将为您提供如下格式的输出:

file.txt
another.txt
directory/another/file.txt
yetagain.odt
another/file.png
directory/file.txt

通过解析此输出,您可以创建如下结构:

+-- file.txt
+-- another.txt
+--\directory
|   +--\another
|   |   +-- file.txt
|   +-- file.txt
+--\another
|   +-- file.png

然后,您可以允许用户按您希望的方式浏览此树。

【讨论】:

  • 是的,这是我的想法,解析也是如此,但我需要能够在 c++ 代码中完成
  • @BorisDishov 好的。好吧,向我们展示你到目前为止所拥有的东西,我可以帮助你。您可以查看zipinfo 是如何实现它的,并且可能链接到(“借用”代码)zipinfo,因为它是开源的。
【解决方案2】:

使用tar -t 可以查看压缩文件的文件名,而无需真正解压缩,请参阅手册页:

TAR(1)                                                                       
...
NAME
     tar — The GNU version of the tar archiving utility

SYNOPSIS
     tar [-] A --catenate --concatenate | c --create | d --diff --compare | --delete | r --append | t --list | --test-label | u --update | x --extract --get [options] [pathname ...]

FUNCTION LETTERS
     Main operation mode:

     -t, --list
           list the contents of an archive

【讨论】:

  • 是的,谢谢,但我正在我的代码中寻找一种方法,而不是从命令行。
  • system("tar", "-t", "...");?我已经很久不用c 编码了,但是你绝对可以从你的程序内部调用现有的程序。祝你好运。
  • @shellter 我知道我可以这样进行系统调用,但我不想这样做,因为它很慢(或者我怀疑它很慢)。我很高兴被证明是错误的,所以我可以采用简单的方法。
  • 鉴于您提议的任务的大小,我看不出system 调用将如何影响单个任务执行的总体时间(并且应该可以为您节省大量时间对项目进行编码)。如果反应时间慢真的是个问题,那么让某些东西工作然后优化它不是更好吗? ;-) 祝你好运!
猜你喜欢
  • 1970-01-01
  • 2013-04-27
  • 2010-11-04
  • 2012-03-08
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多