如何从MemoryStream中解压缩多个文件
本文关键字:文件 解压缩 MemoryStream | 更新日期: 2023-09-27 18:24:39
我正在下载一个压缩文件,并使用以下代码对其进行解压缩:
WebClient client = new WebClient();
MemoryStream download = new MemoryStream(client.DownloadData(targetUrl));
var data = new GZipStream(download, CompressionMode.Decompress, true);
从这里,我如何查看压缩档案中的文件并对其进行排序?我知道这个档案中的一个文件是我需要的,基于它的文件类型(.csv),我需要把它拿出来。如何通过c#实现这一点?
using (var outFile = File.Create(outputFileName))
{
using (GZipStream gzip = new GZipStream(download, CompressionMode.Decompress))
{
var buffer = new byte[4096];
var numRead = 0;
while ((numRead = gzip.Read(buffer, 0, buffer.Length)) != 0)
{
outFile.Write(buffer, 0, numRead);
}
}
}
这里有一篇文章描述了如何使用GZipStream来压缩/解压缩多个文件,但正如您所看到的,作者开发了自己的"zip";用于存储多个文件的格式,并且使用GZipStream压缩单个流。
在您的情况下,若您并没有进行压缩,您很可能会收到标准的zip文件,在这种情况下,您可以使用名为SharpZipLib的库来解压缩您的内容。
以下是使用SharpZipLib 的示例
using (var s = new ZipInputStream(download))
{
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);
if(fileName == myFileName)
{
using (FileStream streamWriter = File.Create(theEntry.Name))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
}
}
}
}
您是否从某个地方提取了一个ZIP文件,并试图从归档中获取一个文件?
你可以让ZipPackage类来做这件事。
http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspx
请参阅GetPart方法以获取示例代码:
http://msdn.microsoft.com/en-us/library/system.io.packaging.package.getpart.aspx