C# 如何在不提取zip文件的情况下从内部存档读取数据?
我有一个包含内部zip文件的zip文件(例如:ZipFile1.zip->ZipFile2.zip->file.txt)。我想使用ICSharpCode.SharpZipLib库读取内部归档文件内容(file.txt)的数据,而不提取到磁盘。可能吗?如果可能的话,请告诉我如何获取此信息。基于,您可以在zip中以C# 如何在不提取zip文件的情况下从内部存档读取数据?,c#,.net,sharpziplib,C#,.net,Sharpziplib,我有一个包含内部zip文件的zip文件(例如:ZipFile1.zip->ZipFile2.zip->file.txt)。我想使用ICSharpCode.SharpZipLib库读取内部归档文件内容(file.txt)的数据,而不提取到磁盘。可能吗?如果可能的话,请告诉我如何获取此信息。基于,您可以在zip中以流的形式打开文件。您还可以从流中打开ZipFile。我相信你能看到这一切的发展方向 using (var zip = new ZipFile("ZipFile1.zip"
流的形式打开文件。您还可以从流
中打开ZipFile
。我相信你能看到这一切的发展方向
using (var zip = new ZipFile("ZipFile1.zip"))
{
var nestedZipEntry = zip.GetEntry("ZipFile2.zip");
using (var nestedZipStream = zip.GetInputStream(nestedZipEntry))
using (var nestedZip = new ZipFile(nestedZipStream))
{
var fileEntry = nestedZip.GetEntry("file.txt");
using (var fileStream = nestedZip.GetInputStream(fileEntry))
using (var reader = new StreamReader(fileStream))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
我们在这里做的是:
打开ZipFile1.zip
查找ZipFile2.zip的条目
将ZipFile2.zip作为流打开
在nestedZipStream
周围创建一个新的ZipFile
对象
查找file.txt的条目
围绕fileStream
创建StreamReader
以读取文本文件
读取file.txt的内容并将其输出到控制台
-在本示例中,base64数据是包含“test.zip”的zip文件的二进制数据,而zip文件又包含“file.txt”。该文本文件的内容是“hello”
注意:如果未找到条目,则GetEntry
将返回null。您需要在编写的任何代码中检查这一点。它在这里起作用,因为我确信这些条目存在于各自的档案中。这是否回答了您的问题?也许这个答案可以帮助您:您已经在提取文件了。不将它们写入磁盘并不意味着不提取它们来读取它们。打开一个指向所需条目的流,并使用SharpZibLib@Llama. 谢谢你的更新。我已经试过了,但读取嵌套存档文件内容无效。如果您接受嵌套存档只是包含存档的另一个文件,则读取嵌套存档文件效果很好。我添加了一个答案,证明它是有效的。感谢您的即时回复。我解决了我的问题。问题:当我尝试同样的方法时,我得到以下错误“流不可查找参数名:nestedZipStream”。由于nestedZipStream.CanSeek值为false。解决方案:将nestedZipStream复制到MemoryStream,这样我就可以为nestedZipStream创建ZipFile并读取ZipFile条目。啊,是的。您可以在源流上检查.CanSeek
,查看它是否可查找,并且仅在不可查找时进行复制。