如何从 zip 文件中读取数据而无需解压整个文件
.Net (C#) 中是否有从 zip 文件中提取数据而不解压整个文件的方法?
如果使用的压缩算法按确定的顺序压缩文件,我可能希望从 zip 文件的开头提取数据(文件)。
Is there anyway in .Net (C#) to extract data from a zip file without decompressing the complete file?
I possibly want to extract data (file) from the start of a zip file if the compression algorithm compress the file used was in a deterministic order.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
使用 .Net Framework 4.5(使用 ZipArchive):
在zip文件中找到“myfile”并解压它。
With .Net Framework 4.5 (using ZipArchive):
Find "myfile" in zipfile and extract it.
DotNetZip 是您的朋友。
就像这样简单:(
您也可以提取到文件或其他目的地)。
阅读 zip 文件的目录非常简单:
编辑注意: DotNetZip 曾经在 Codeplex 工作。 Codeplex 已关闭。旧存档仍然在 Codeplex 上提供。代码似乎已迁移到 Github:
DotNetZip is your friend here.
As easy as:
(you can also extract to a file or other destinations).
Reading the zip file's table of contents is as easy as:
Edited To Note: DotNetZip used to live at Codeplex. Codeplex has been shut down. The old archive is still available at Codeplex. It looks like the code has migrated to Github:
如果您想使用 SharpZipLib,类似这样的内容将一一列出并提取文件:
基于此示例: zip 文件内的内容
Something like this will list and extract the files one by one, if you want to use SharpZipLib:
Based on this example: content inside zip file
以下是如何将 UTF8 文本文件从 zip 存档读取到字符串变量(.NET Framework 4.5 及更高版本):
Here is how a UTF8 text file can be read from a zip archive into a string variable (.NET Framework 4.5 and up):
以下代码可以将特定文件读取为字节数组:
the following code can read specific file as byte array :
Zip 文件有一个目录。每个 zip 实用程序都应该能够仅查询 TOC。或者您可以使用 7zip -t 等命令行程序来打印目录并将其重定向到文本文件。
Zip files have a table of contents. Every zip utility should have the ability to query just the TOC. Or you can use a command line program like 7zip -t to print the table of contents and redirect it to a text file.
在这种情况下,您将需要解析 zip 本地标头条目。 zip文件中存储的每个文件都有前面的本地文件头条目,该条目(通常)包含足够的解压信息,一般情况下,您可以对流中的此类条目进行简单解析,选择所需的文件,将头+压缩文件数据复制到其他文件文件,然后对该部分调用 unzip (如果您不想处理整个 Zip 解压代码或库)。
In such case you will need to parse zip local header entries. Each file, stored in zip file, has preceding Local File Header entry, which (normally) contains enough information for decompression, Generally, you can make simple parsing of such entries in stream, select needed file, copy header + compressed file data to other file, and call unzip on that part (if you don't want to deal with the whole Zip decompression code or library).