浏览压缩文件与游览解压缩它们

Browsing compressed files withtour decompressing them

本文关键字:解压缩 压缩 文件 浏览      更新时间:2023-10-16

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

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

并从那里导航到每个文件夹。例如,进入文件夹 1 并查看: 罚款 文件2

如何用C++来弥补这一点?如果无法只看到文件夹,我会很高兴使用一些工具,我可以使用它查看所有文件,并且可以以一种仅显示文件夹并使"浏览"功能的方式解析它们。

编辑:我需要它与尽可能多的压缩方法一起工作。

这不是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

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

使用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