0

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

现在的问题是怎么做?

我担心的一个问题是我将使用的文件在压缩后可能超过 1GB,而我将在其上运行的系统将有 512MB 到 2GB 的内存,所以我不想让压缩端在内存中狂奔并锁定系统。我一直在考虑的方法是在一个线程中运行压缩,在内存流中排队 5-​​10Mb,然后将信息发送到另一个线程中的 ftp。这是一个好方法还是有更好的方法来做到这一点?是否有任何陷阱,比如它需要在文件完成时重写文件开头的文件头或其他任何东西?

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

感谢您的帮助。

4

1 回答 1

1

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

基本上,您创建一个ZipOutputStream将数据传递到 FTP 流的方法。PutNextEntry在每个文件的开头调用,然后流式传输文件内容。仅此而已。

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

于 2010-02-19T19:02:18.217 回答