我会想通过网络发送之前压缩文件。 我认为最好的办法是7zip的,因为它是免费和开源。
我如何使用7zip的使用.NET?
我知道, 7zip
是免费的,他们在C#源代码,但由于某种原因,它是C#的速度很慢,所以我宁愿调用DLL 7z.dll
出于性能的考虑安装7zip的时谈到。 所以,我能够eassily元帅和调用方法的方式7z.dll
是叫库的帮助sevenzipsharp 。 例如添加该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一个问题:
你有没有考虑一个备用库 - 一个甚至不要求安装的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)
谢谢你在这里考虑的性能! 我想太多的人会做你试图避免什么:压缩到一个临时文件,然后做临时文件的东西。
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();
异常消息:消息:试验方法Test7zip.UnitTest1.TestCompress抛出异常:SevenZip.SevenZipException:执行失败归因于SevenZipSharp的bug。 请有关报告给http://sevenzipsharp.codeplex.com/WorkItem/List.aspx ,发布版本号和附加档案