我希望我的应用使用.7z文件中的文件。
我找到了how to decompress a 7z file的一些解释。但是,它们都是关于我尚未在野外遇到的一种情况:将压缩文件解压缩为单个文件的档案。我希望.7z归档文件可以解压缩为任意数量的文件,可能在任意子文件夹中。
似乎including the whole 7zip application and then running that in a process可以做到这一点。但是,考虑到有一个official LZMA SDK,这似乎是不必要的额外步骤。此外,这还会导致有关交叉兼容性的问题。
那么,如何在C#(.NET 3.5)中使用.7z归档文件将其解压缩到给定的文件夹中?
“ 请显示无效的代码。”
好吧,目前我在另一个问题上使用this answer的后半部分。但是,我期望不要执行我想要的操作-output
(就像input
一样是FileStream
,因此很明显,这只会创建一个文件。
它表明Decoder
是执行解压缩的类,但是它没有可与例如DirectoryInfo
,string
路径之类的东西-都是一个文件输入,一个文件输出。我发现使用SDK的每条信息都做同样的事情。我还没有找到一个将存档提取到多个文件的文件。
答案 0 :(得分:0)
我得出以下结论:
将.7z归档文件解压缩到文件夹不是C#LZMA SDK提供的功能。
恐怕我没有发现任何确凿的证据,例如直接发表博客文章的证据。
但是,我发现了a description of the .7z
file format。此说明没有提供足够的技术细节来制定可行的解决方案,但其中包含有关格式的某些事实:
在本节中,我将解释前面的示例如何存储在数据Structured [...]
中首先是标题,它仅包含两个变量:FileInfo和StreamsInfo。
FileInfo可能是最容易理解的结构。它包含7z中每个文件的名称,以及几个其他标志,用于定义文件实际上是目录还是文件为空文件。
据我所知,此结构未反映在C#SDK的代码中。结合Decoder.Code()
方法不适用于目录路径或多个输出Stream
的信息,这是一个有力的指标。
因此,似乎LZMA SDK的C#部分仅处理单个文件或在链接文档中被称为“压缩流”的加密和解密。 .7z
存档格式然后算作一种单独的格式,最终是一种包含任意数量的压缩流的结构。
实际上,这些流可以任意方式组合;例如归档文件可以包含使用LZMA压缩的文件A和B,然后将文件C添加到混合文件中,并使用另一种算法再次对其进行压缩。这使得解压缩.7z
归档文件变得更加复杂,这更加可惜SDK中没有提供此功能。