我有文件(来自第 3 方)正在通过 FTP 传输到我们服务器上的某个目录.我下载它们并处理它们甚至'x'分钟.效果很好.
I have files (from 3rd parties) that are being FTP'd to a directory on our server. I download them and process them even 'x' minutes. Works great.
现在,一些文件是 .zip 文件.这意味着我无法处理它们.我需要先解压缩它们.
Now, some of the files are .zip files. Which means I can't process them. I need to unzip them first.
FTP 没有压缩/解压缩的概念 - 所以我需要抓取 zip 文件,解压缩,然后处理它.
FTP has no concept of zip/unzipping - so I'll need to grab the zip file, unzip it, then process it.
查看 MSDN zip api,我似乎无法解压缩到内存流?
Looking at the MSDN zip api, there seems to be no way i can unzip to a memory stream?
所以这是唯一的方法......
So is the only way to do this...
注意:文件的内容很小 - 比如 4k <-> 1000k.
NOTE: The contents of the file are small - say 4k <-> 1000k.
推荐答案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 中绝对需要它,您可以这样做:
Normally you should avoid copying it into another stream - just use it "as is", however, if you absolutely need it in a MemoryStream, you could do:
using(var ms = new MemoryStream()) { stream.CopyTo(ms); ms.Position = 0; // rewind // do something with ms }更多推荐
如何将文件解压缩到 .NET 内存流?
发布评论