管道压缩和ftp传输

时间:2010-02-19 18:44:56

标签: ftp pipeline lzma

我正在编写一个实用程序,它将使用LZMA sdk压缩文件(或文件集),然后将文件发送到ftp服务器。通常,压缩的速度比ftp连接的速度快。我想做的是不是压缩文件,等待它完成,然后开始上传我想压缩到临时文件或流,然后在压缩时上传完成的部分。

现在的问题是怎么样?

我所关注的一个问题是我将要处理的文件在压缩时可能超过1GB,我将运行的系统将有512MB到2GB的内存,所以我不想让压缩端运行狂野进入内存并锁定系统。我一直在考虑的方法是在一个线程中运行压缩,在内存流中排队5-10Mb,然后将信息发送到另一个线程中的ftp。这是一个好方法还是有更好的方法呢?是否有任何问题需要在文件开头完成或其他任何事情时重写文件头?

我打算用c#写这个,但c,c ++或java中的代码示例也很好。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我不熟悉LZMA SDK,但在使用SharpZipLib库的C#中,很容易流出zip文件。您不必担心内存,只有被压缩/流式传输的块在任何时候都会在内存中。我们使用它来通过HTTP压缩和流式传输文件,但FTP的概念是相同的。

基本上,您创建了一个将数据传递到FTP流的ZipOutputStream。在每个文件的开头调用PutNextEntry,然后流式传输文件内容。没错多少。

http://www.icsharpcode.net/OpenSource/SharpZipLib/