2017-05-12 2 views
1

Ich verwende Embarcadero C++ Builder 10.1 Berlin Update 2. Ich verwende System.Zip.TZipFile.ExtractAll(), um eine große .zip Datei zu extrahieren.Wie kann System.Zip.TZipFile.ExtractAll aufgelöst werden, wenn nicht alle Daten aus der ZIP-Datei extrahiert werden?

hier die Details rund um das Problem Szenario sind:

  • Die Größe der .zip Datei ist 387.077 KB
  • System.Zip.TZipFile.ExtractAll() Mit der .zip-Datei zu extrahieren, landen wir mit:
    • ein 4.194.304 KB Datei.
    • Die Daten werden abgeschnitten.
  • Windows-Betriebssystem verwenden, rechts Extract All... klicken, erhalten wir
    • eine 6.035.259 KB Größe Datei auf.

Wir müssen alle Daten aus dieser Datei.

Lesen Sie die System.Zip.TZipFile Dokumentation, ich sehe nichts über Einschränkungen im Zusammenhang mit der Dateigröße.

Von dem, was ich weiß, ist dies Embarcadero die Möglichkeit, .zip Dateien zu extrahieren. Wie kann ich dieses Problem beheben?

+0

Weißt du, ob es alles auf die Festplatte geleert hat? Angenommen, unter Windows OS laufen zu tun Äquivalent von "Sync" – Griffin

+0

@Griffin Ich bin sicher, es ist meine Ignoranz, was meinst du, alles auf die Festplatte geleert? Der Aufruf der Extraktionsmethode ist in 'Synchronize()' eingeschlossen, was sicherstellen soll, dass er auf dem Hauptthread ausgeführt wird. – HappyCoding

+0

Im Linux-basierten Betriebssystem 'Sync' wird sichergestellt, dass alles, was im Speicher überragend ist, gelöscht wird. Ich denke in Windows haben Sie vielleicht etwas wie 'FlushFileBuffers', das eine ähnliche Sache machen kann. Natürlich ist dies nicht die Ursache des Problems, aber überprüfen Sie es. – Griffin

Antwort

0

Bis Sie uns sagen, ob die Daten einfach abgeschnitten oder stattdessen irgendwie umgewandelt werden, können wir nur wirklich erraten, was vor sich geht. Es ist jedoch eine gut ausgebildete Schätzung.

Ihre Ausgabe ist genau 2 Bytes lang, eine vertraute Grenze für viele ältere Technologien.

Die Tatsache, dass (wie Sie darauf hinweisen) die Dokumentation diese Grenze nicht angibt, deutet weiter darauf hin, dass dies nur eine Obergrenze für das ist, was die Entwickler wahrscheinlich vor sehr langer Zeit zu unterstützen pflegten. Sie hätten nie gedacht, dass Sie mehr brauchen würden, insbesondere, da viele Dateisysteme bis vor kurzem nicht einmal Dateien unterstützten, die größer waren.

Bevorzugen Sie moderne, Standard-C++ und eine nette Drittanbieter-Bibliothek zum Entpacken.

+0

Die Daten werden abgeschnitten. Ich habe den Beitrag aktualisiert, um diese Informationen hinzuzufügen. Zu diesem Zeitpunkt stimme ich Ihrer Antwort zu. – HappyCoding

+1

'TZipFile' wurde 2011 in XE2 eingeführt. Große' .zip' Dateien gibt es schon viel länger und Windows hat große Dateien> 4GB unterstützt, seit NTFS das erste Mal in NT3 eingeführt wurde. Embarcadero hat einfach nicht die Unterstützung für das ZIP64-Format implementiert (und hat es immer noch nicht getan), als sie 'TZipFile' erstellt haben. –

+1

@RemyLebeau: Fair genug. –

Verwandte Themen