11 Stimmen

Sortierreihenfolge der Dateien im Zip-Archiv kontrollieren

Beschreibung

Ich bin daran interessiert zu erfahren, ob es eine Möglichkeit gibt, die Sortierreihenfolge von Dateien in Zip-Dateien mit Hilfe von Standardroutinen in PHP und/oder Java zu kontrollieren.

Ich bin nicht in erster Linie an der Verwendung von zip/unzip mit shell_exec() oder ähnliches, aber es kann von Interesse sein, wenn es eine einfach zu lesende Lösung bietet.

Bei der Sortierreihenfolge kann man davon ausgehen, dass es sich um Datum/Uhrzeit handelt, wenn in der Zip-Datei keine Sortierreihenfolge vorhanden ist. Ich habe die Spezifikationen nicht gelesen, also weiß ich es nicht.

Beispiel

Dateien

foo.txt
bar.txt
test.txt
newfile.txt

Nehmen wir an, dass jede Datei den Namen der Datei enthält (foo.txt => foo.txt)

Problem

Ich möchte den Dateien eine Sortierreihenfolge zuweisen, damit sie beim Entpacken mit unzip die Dateien werden in der richtigen Reihenfolge abgelegt. Warum ist das wichtig? Weil ich benutze unzip -p um den Inhalt der Zip-Datei zu übertragen.

Die Reihenfolge, in der die Dateien dem Archiv hinzugefügt werden, sollte keine Rolle spielen.

Ergebnis

Beabsichtigtes Ergebnis (für dieses Beispiel (mit unzip -p))

test.txt
foo.txt
newfile.txt
bar.txt

0 Stimmen

Können Sie erklären, was Ihr Endziel ist? Vielleicht möchten Sie, dass Ihre README-Datei in WinZip ohne Scrollen sichtbar ist. Ich glaube nämlich nicht, dass es möglich ist, das zu tun, was du beschreibst, aber vielleicht gibt es einen besseren Weg.

0 Stimmen

Mein Endziel ist unter dem Abschnitt "Ergebnis" beschrieben. Mehr gibt es nicht zu sagen. Um eine Antwort geben zu können, müssen Sie wohl mit dem unzip Befehl

5voto

Peter Lindqvist Punkte 9942

Es war gar nicht so schwer. Es scheint, dass der Dateiindex mit der Reihenfolge zusammenhängt, in der die Dateien dem Archiv hinzugefügt werden, und dies steuert die Ausgabe von unzip -p da es die Dateien in der Reihenfolge 0..n zu iterieren scheint.

Im Folgenden wird beschrieben, wie man eine Datei erstellt, die die Bedingungen erfüllt. (Nun, fast, denn ich habe die Zeilenumbrüche in meinen txt-Dateien vergessen)

$files = array(
    'test.txt',
    'foo.txt',
    'newfile.txt',
    'bar.txt'
);

$outfile = 'testout.zip';
if (file_exists($outfile)) {
    unlink($outfile);
}
$o = new ZipArchive();
$o->open($outfile,ZipArchive::CREATE);
foreach($files as $key => $file) {
    $o->addFile($file);
}

$o->close();

2voto

Emil Vikström Punkte 87499

Sie können den Befehl zipinfo (o unzip -Z ), um die Dateien des Archivs anzuzeigen. man zipinfo haben auch Beispiele, wie man die Ausgabe sortieren kann, aber sie kann auch in PHP sortiert werden, wenn man die Dateien in ein Array einliest und das Array sortiert.

2 Stimmen

Ich muss die Zip-Datei so schreiben, dass ein anschließendes unzip -p die Dateien in der richtigen Reihenfolge ausgibt. Ist das mit der von Ihnen beschriebenen Technik des Einlesens der zip-Datei in ein Array und des Sortierens möglich?

0 Stimmen

Perfekt, danke.

0voto

fmk_wa Punkte 21

Die Sortierreihenfolge der entpackten Dateien (oder anderer Dateien im Dateisystem) hängt von dem "Client" ab, den Sie zum Anzeigen der Dateien verwenden. Der Befehl ls auf einem *nix-System zeigt die Dateien standardmäßig nach Namen geordnet an. Wenn Sie eine Dateimanager-Anwendung (oder einen Unzipper) verwenden, können Sie die Sortierung selbst bestimmen. Eine vordefinierte Sortierung in einem Archiv halte ich nicht für sehr sinnvoll.

0 Stimmen

Ich spreche nicht von Dateien im Dateisystem, sondern nur von Dateien in Zip-Archiven. Und während es für Sie vielleicht keinen Sinn ergibt, macht es für mich Sinn. Ich kann die Sortierung auf der "Client"-Seite nicht ändern. Ich muss eine Datei schreiben, die die Dateien in der richtigen Reihenfolge enthält.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X