我有文件(从第三方)是FTP的,在我们的服务器上的目录。我下载它们并处理它们,即使是“x”分钟。效果很好。
现在,其中一些文件是.zip
文件。这意味着我不能处理它们。我得先解开拉链。
FTP没有zip/unzipping的概念-所以我需要抓取zip文件,解压缩它,然后处理它。
看看MSDN zip api,似乎没有办法解压到内存流?
所以唯一的办法就是...
注意:文件的内容很小--比如4k <-> 1000k。
发布于 2014-03-24 17:14:12
Zip压缩支持是内置的:
using System.IO;
using System.IO.Compression;
// ^^^ requires a reference to System.IO.Compression.dll
static class Program
{
const string path = ...
static void Main()
{
using(var file = File.OpenRead(path))
using(var zip = new ZipArchive(file, ZipArchiveMode.Read))
{
foreach(var entry in zip.Entries)
{
using(var stream = entry.Open())
{
// do whatever we want with stream
// ...
}
}
}
}
}
通常,你应该避免将其复制到另一个流中--只需“按原样”使用它,然而,如果你在一个MemoryStream
中绝对需要它,你可以这样做:
using(var ms = new MemoryStream())
{
stream.CopyTo(ms);
ms.Position = 0; // rewind
// do something with ms
}
发布于 2014-03-24 17:13:51
您可以使用ZipArchiveEntry.Open
来获取流。
这段代码假设zip归档文件有一个文本文件。
using (FileStream fs = new FileStream(path, FileMode.Open))
using (ZipArchive zip = new ZipArchive(fs) )
{
var entry = zip.Entries.First();
using (StreamReader sr = new StreamReader(entry.Open()))
{
Console.WriteLine(sr.ReadToEnd());
}
}
发布于 2016-10-20 12:37:16
using (ZipArchive archive = new ZipArchive(webResponse.GetResponseStream()))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
Stream s = entry.Open();
var sr = new StreamReader(s);
var myStr = sr.ReadToEnd();
}
}
https://stackoverflow.com/questions/22604941
复制相似问题