我正在使用 SevenZipSharp 将文件压缩成 zip 文件。有没有办法使用它从内存流中创建一个 zip(意思是,之前将文件加载到内存流中)?
谢谢,玛雅。
我正在使用 SevenZipSharp 将文件压缩成 zip 文件。有没有办法使用它从内存流中创建一个 zip(意思是,之前将文件加载到内存流中)?
谢谢,玛雅。
我正在使用带有流的 SevenZipSharp 没问题。
SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor();
compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2;
compressor.CompressionLevel = SevenZip.CompressionLevel.Normal;
compressor.CompressStream(ms, compressedStream);
在最后一行,“ms”是我要压缩的流,比方说 MemoryStream。“compressedStream”是我要压缩到的流,它可以是另一个 MemoryStream 甚至是 FileStream ...
解压:
SevenZip.SevenZipExtractor extractor = new SevenZip.SevenZipExtractor(compressedStream);
extractor.ExtractFile(0, decompressedStream);
SevenZipExtractor 没有解压缩流方法,所以我使用 ExtractFile() 代替。
很容易。在调用上述任何代码之前,我必须指定 7zip dll:
SevenZip.SevenZipBase.SetLibraryPath(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\7-zip\\7z.dll");
就我而言,我没有将 7z.dll 与我的应用程序捆绑在一起,7-zip 是单独安装到机器上的。
总之超级简单。我从 codeplex - http://sevenzipsharp.codeplex.com/下载了 SevenZipSharp,从http://www.7-zip.org/下载了7-zip 。
不幸的是,SevenZipSharp 只是 7z 应用程序的一个 COM 包装器。所以没有简单的流支持。也许可以指示它通过<SevenZipCompressor Instance>.CustomParameters.Add()
将文件输出到stdout
,然后可以在您的应用程序中以某种方式读取该文件。但这只是推测性的,我没有直接提示如何让它发挥作用。