在通过网络发送文件之前,我想压缩它。我认为最好的方法是7zip,因为它是免费的和开源的。
我如何在.net?中使用7zip
我知道7zip是免费的,而且它们在c#中有源代码,但是由于某些原因,在c#上很慢,所以出于性能原因,我宁愿调用在安装7zip时附带的dll 7z.dll。因此,在7z.dll中轻松编组和调用方法的方法是借助名为七拉普的库。例如,将dll添加到我的项目将使我能够:

// if you installed 7zip 64bit version then make sure you change plataform target
// like on the picture I showed above!
SevenZip.SevenZipCompressor.SetLibraryPath(@"C:\Program Files\7-Zip\7z.dll");
var stream = System.IO.File.OpenRead(@"SomeFileToCompress.txt");
var outputStream = System.IO.File.Create("Output.7z");
SevenZip.SevenZipCompressor compressor = new SevenZip.SevenZipCompressor();
compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2;
compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
compressor.CompressStream(stream, outputStream);这就是我在c#中使用7zip的方式。
现在我的问题是:
我想通过网络发送一个压缩文件。我知道我可以先把它压缩然后再寄出去。这个文件是4GB的,所以我得等很长时间才能压缩它。我会在硬盘上浪费很多空间。那我就能寄出去了。我觉得这太复杂了。--我想知道在压缩文件的同时,如何才能发送文件。
这似乎是SevenZipSharp的一个问题:

发布于 2012-09-08 04:52:34
你有没有考虑过另一个库--一个甚至不需要安装/可用7-Zip的库?
发布在http://dotnetzip.codeplex.com/上的描述:
从流内容创建zip文件,保存到流,提取到流,从流读取
与7-Zip不同的是,DotNetZip被设计为与C# / .Net一起工作。
包括流媒体在内的很多例子都可以在http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples上找到。
另一种选择是使用7-Zip命令行版本(7z.exe),并从标准的输入/输出中写入/读取。这将允许您使用7-Zip文件格式,同时还可以将所有核心工作保留在本机代码中(尽管可能不会有太大的差别)。
回首SevenZipSharp:
自从0.29发行版以来,就支持流。
看看http://sevenzipsharp.codeplex.com/SourceControl/changeset/view/59007#364711:
看来你想要这样的方法:
public void CompressStream(Stream inStream, Stream outStream)谢谢你在这里考虑表演!我认为太多的人会做你想要避免的事情:压缩到一个临时文件,然后对临时文件做一些事情。
发布于 2018-12-27 00:40:41
CompressStream抛出了一个异常。我的代码如下:
public void TestCompress()
{
string fileToCompress = @"C:\Users\gary\Downloads\BD01.DAT";
byte[] inputBytes = File.ReadAllBytes(fileToCompress);
var inputStream = new MemoryStream(inputBytes);
byte[] zipBytes = new byte[38000000]; // this memory size is large enough.
MemoryStream outStream = new MemoryStream(zipBytes);
string compressorEnginePath = @"C:\Engine\7z.dll";
SevenZipCompressor.SetLibraryPath(compressorEnginePath);
compressor = new SevenZip.SevenZipCompressor();
compressor.CompressionLevel = CompressionLevel.Fast;
compressor.CompressionMethod = CompressionMethod.Lzma2;
compressor.CompressStream(inputStream, outputStream);
inputStream.Close();
outputStream.Close();异常消息: Message: Test方法Test7zip.UnitTest1.TestCompress抛出异常: SevenZip.SevenZipException:由于SevenZipSharp中的错误,执行失败。请向http://sevenzipsharp.codeplex.com/WorkItem/List.aspx报告,张贴发行编号,并附上档案
https://stackoverflow.com/questions/12328068
复制相似问题