Frage

Ich schreibe ein Dienstprogramm, das eine Datei (oder eine Reihe von Dateien) mithilfe des LZMA SDK sendet und dann die Datei an einen FTP -Server aussendet. Normalerweise ist die Geschwindigkeit der Komprimierung schneller als die Geschwindigkeit der FTP -Verbindung. Was ich gerne tun möchte, ist, anstatt die Datei zu komprimieren, darauf zu warten, dass sie fertiggestellt wird, und dann mit dem Upload zu starten.

Die Frage ist jetzt wie?

Ein Problem, das ich habe, sind die Dateien, mit denen ich arbeiten werde, kann über 1 GB bei komprimierter und die Systeme, auf denen ich diese ausführen werde und sperren das System. Die Methode, über die ich nachgedacht habe, besteht darin, die Komprimierung in einem Thread auszuführen und 5-10 MB in einem Speicherstrom zu starten und dann die Informationen an die FTP im anderen Thread zu senden. Ist dies ein guter Ansatz oder gibt es einen besseren Weg, dies zu tun? Gibt es gotchas, wie es den Dateikopf zu Beginn der Datei umschreiben muss, wenn sie fertig ist oder etwas anderes?

Ich habe vor, dies in C# zu schreiben, aber Code -Beispiele in C, C ++ oder Java sind auch in Ordnung.

Danke für Ihre Hilfe.

War es hilfreich?

Lösung

Ich bin mit der LZMA SDK nicht vertraut, aber in C# mit der Sharpziplib -Bibliothek ist es einfach, Zip -Dateien auszubauen. Sie müssen sich keine Sorgen um den Speicher machen, nur die Blöcke, die komprimiert/gestreamt werden, sind gleichzeitig im Speicher. Wir verwenden dies, um Dateien über HTTP zu komprimieren und zu streamen, aber das Konzept für FTP ist gleich.

Grundsätzlich erstellen Sie eine ZipOutputStream Das gibt Daten an den FTP -Stream weiter. Anruf PutNextEntry Start jeder Datei und dann den Dateiinhalt. Nicht viel mehr als das.

http://www.icsharpcode.net/opensource/sharpziplib/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top