Frage

In meiner Anwendung wählt der Benutzer eine große Datei (> 100 MB) auf seinem Laufwerk aus. Ich wünsche mir, dass das Programm dann die ausgewählte Datei entgegennimmt und Hacken Sie es in archivierte Teile das sind 100 MB oder weniger. Wie kann das getan werden? Was Bibliotheken und Datei Format Sollte ich es benutzen? Könnten Sie mir einen Beispielcode geben? Nachdem der erste 100 -MB -archivierte Teil erstellt wurde, werde ich ihn auf einen Server hochladen, dann werde ich den nächsten 100 -MB -Teil hochladen und so weiter, bis der Upload beendet ist. Danach werde ich von einem anderen Computer all diese archivierten Teile herunterladen, und dann möchte ich Schließen Sie sie mit der Originaldatei an. Ist dies beispielsweise bei den 7zip -Bibliotheken möglich? Vielen Dank!

AKTUALISIEREN: Aus der ersten Antwort denke ich, dass ich SevenzipSharp verwenden werde, und ich glaube, ich verstehe jetzt, wie man eine Datei in 100 MB archivierte Teile aufteilt, aber ich habe immer noch zwei Fragen:

  1. Ist es möglich, den ersten 100 -MB -archivierten Teil zu erstellen und ihn hochzuladen, bevor er den nächsten 100 -MB -Teil erstellt?
  2. Wie extrahieren Sie eine Datei mit SevenzipSharp aus mehreren geteilten Archiven?

Update Nr. 2: Ich habe gerade mit der 7-Zip-GUI herumgespielt und multi-bändige/geteilte Archive erstellt, und ich fand heraus, dass die Auswahl des ersten und Extrahierens der gesamten Datei aus allen geteilten Archiven extrahiert wird. Dies lässt mich glauben, dass Wege zu den nachfolgenden Teilen in der ersten enthalten sind (oder ist es aufeinanderfolgend?). Ich bin mir jedoch nicht sicher, ob dies direkt von der Konsole funktionieren würde, aber ich werde das jetzt versuchen und sehen, ob es Frage 2 aus dem ersten Update löst.

War es hilfreich?

Lösung

Sich ansehen Sevenzipsharp, Sie können dies verwenden, um Ihre Spit 7Z -Dateien zu erstellen, alles zu erstellen, was Sie hochladen möchten, und dann auf der Serverseite extrahieren.

Um den Archiv -Blick auf den zu teilen SevenZipCompressor.CustomParameters Mitglied, Passierung in "v100m". (Weitere Parameter in der 7-Zip.chm-Datei von 7zip finden)

Andere Tipps

Sie können die Daten zuerst in 100 MB "Pakete" aufteilen und dann jedes Paket wiederum in den Kompressor weitergeben und so tun, als ob es sich nur um separate Dateien handelt.

Diese Art von Komprimierung ist jedoch normalerweise auf Streambasis. Solange die Bibliothek, die Sie verwenden, ihre E/A über eine Stream -abgeleitete Klasse ausführen, wäre es ziemlich einfach, Ihren eigenen Stream zu implementieren, der die Daten "paket", so wie Sie es im Fliegen mögen -, wenn Daten übergeben werden Ihre Write () -Methode Sie schreiben sie in eine Datei. Wenn Sie in dieser Datei 100 MB überschreiten, schließen Sie einfach diese Datei und öffnen eine neue und schreiben weiter.

Beide dieser Ansätze können Sie leicht ein "Paket" hochladen und gleichzeitig den nächsten komprimieren.

bearbeiten

Nur um klar zu sein - Dekompression ist nur die umgekehrte Abfolge der oben genannten. Wenn Sie also den Komprimierungscode funktionieren, ist die Dekompression einfach.

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