我希望在通过网络发送文件之前压缩文件。我认为最好的方法是7zip,因为它是免费和开源的。
我如何使用7zip与.net?
我知道7zip
是免费的,并且他们在c#中有源代码但由于某种原因它在c#上非常慢,所以我宁愿调用安装7zip时出现的dll 7z.dll
原因。因此,我能够在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所以我将需要等待很长时间才能压缩。我将在硬盘上浪费大量空间。然后我终于可以发送它了。我认为这很复杂。 我想知道如何在压缩文件的同时发送文件。
答案 0 :(得分:2)
您是否考虑过一个备用库 - 一个甚至不需要安装/可用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)
感谢您在这里考虑表演!我想太多人会做你想要避免的事情:压缩到临时文件,然后对临时文件做一些事情。
答案 1 :(得分:0)
CompressStream引发异常。我的代码如下:
def inc(x):
return x + 1
def double(x):
return x + 2
def add(x, y):
return x + y
data = [1, 2, 3, 4, 5]
output = []
for x in data:
a = inc(x)
b = double(x)
c = add(a, b)
output.append(c)
total = sum(output)
import dask
output = []
for x in data:
a = dask.delayed(inc)(x)
b = dask.delayed(double)(x)
c = dask.delayed(add)(a, b)
output.append(c)
total = dask.delayed(sum)(output)
total.visualize() # see image to the right
异常消息: 消息:测试方法Test7zip.UnitTest1.TestCompress引发异常: SevenZip.SevenZipException:由于SevenZipSharp中的错误,执行失败。 请向http://sevenzipsharp.codeplex.com/WorkItem/List.aspx报告,发布版本号并附加档案文件