GZIP Datei entpacken (Linux und Windows)
GZIP Datei entpacken (Linux und Windows)
Moin,
ich habe eine Datei test.gz die ich mit FreePascal/Lazarus entpacken möchte.
Die gz Datei beinhaltet mehrere Dateien.
Gibt es eine einfache Möglichkeit wie bei zipper (der nur zip kann) eine gz Datei zu öffen und den unbekannten Inhalt in ein Destination Folder zu entpacken?
Danke für Eure Unterstützung
ich habe eine Datei test.gz die ich mit FreePascal/Lazarus entpacken möchte.
Die gz Datei beinhaltet mehrere Dateien.
Gibt es eine einfache Möglichkeit wie bei zipper (der nur zip kann) eine gz Datei zu öffen und den unbekannten Inhalt in ein Destination Folder zu entpacken?
Danke für Eure Unterstützung
Re: GZIP Datei entpacken (Linux und Windows)
Danke, die und viele andere habe ich gelesen aber keine löst das Problem in meiner Frage.theo hat geschrieben: ↑Do 18. Jan 2024, 16:57viewtopic.php?t=7602
Vllt. auch https://www.freepascal.org/~michael/art ... chives.pdf
-
- Beiträge: 1470
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
- CPU-Target: 32/64Bit
Re: GZIP Datei entpacken (Linux und Windows)
Ich verwende gerne "Abbrevia", das kann man mit OPM zum Lazarus hinzu kompillieren.
Du kannst die GZIP Datei entweder als Datei öffnen oder als TStream. Damit kann man die GZIP Daten ohne Probleme im TMemoryStream halten. Entpacken kann man entweder in eine Datei oder auch in einen TStream, also auch in einen TMemoryStream.
Solltest du die Daten vom GZIP nur "intern" nutzen bietet sich die Stream Variante an, da man keine Dateien auf der Festplatte benötigt und somit auch die ganze Problematik mit Zugriffsrechte weg hat.
Hier bekommt man "Abbrevia 5.2.zip":
https://sourceforge.net/projects/tpabbrevia/files/
Du kannst die GZIP Datei entweder als Datei öffnen oder als TStream. Damit kann man die GZIP Daten ohne Probleme im TMemoryStream halten. Entpacken kann man entweder in eine Datei oder auch in einen TStream, also auch in einen TMemoryStream.
Solltest du die Daten vom GZIP nur "intern" nutzen bietet sich die Stream Variante an, da man keine Dateien auf der Festplatte benötigt und somit auch die ganze Problematik mit Zugriffsrechte weg hat.
Hier bekommt man "Abbrevia 5.2.zip":
https://sourceforge.net/projects/tpabbrevia/files/
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: GZIP Datei entpacken (Linux und Windows)
Danke! Abbrevia habe ich vorher unter Windows benutzt aber aktuell bekomme ich das nicht mehr aus dem svn installiert. Auch nicht mit fpcupdeluxe. Ich war mir auch nicht sicher, ob das dann unter Linux läuft, wenn ich es wieder installiert bekommen würde.MmVisual hat geschrieben: ↑Do 18. Jan 2024, 17:10Ich verwende gerne "Abbrevia", das kann man mit OPM zum Lazarus hinzu kompillieren.
Du kannst die GZIP Datei entweder als Datei öffnen oder als TStream. Damit kann man die GZIP Daten ohne Probleme im TMemoryStream halten. Entpacken kann man entweder in eine Datei oder auch in einen TStream, also auch in einen TMemoryStream.
Solltest du die Daten vom GZIP nur "intern" nutzen bietet sich die Stream Variante an, da man keine Dateien auf der Festplatte benötigt und somit auch die ganze Problematik mit Zugriffsrechte weg hat.
Ich benötige die Dateien auf der Festplatte. Es handelt sich im Archiv um mehrere Dateien, deren genauen Dateinamen ich nicht kennen. Mit dem Zipper kann man wunderbar zip-Files in ein Directory entpacken. Einfach ZipFileName und dann Output-Directory und fertig.
Ich finde nichts vergleichbares für gz-Files.
-
- Beiträge: 1470
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
- CPU-Target: 32/64Bit
Re: GZIP Datei entpacken (Linux und Windows)
Es läuft unter Linux und Windows und Lazarus V3.0.
Ich installiere das nie und habe die Dateien in meinem Projekt einfach in einem Unterordner "Abbrevia" abgelegt und in den Projekteinstellungen > Compilereinstellungen noch in "Andere Units" und "Include-Dateien" jeweils den "Abbrevia" Ordner angefügt. Damit findet es Lazarus und man braucht es nicht installieren.
Das macht die Updates von Lazarus einfacher, da man nicht jedes mal alle Komponenten installieren muss.
Da wo du es dann brauchst bindest du die Unit "AbZipKit" mit ein, damit hast du Zugriff auf die Komponente:
Var HilfeZip: TAbZipKit;
Das war's dann. Der Download Link steht im letzten Posting.
Diverse Befehle die ich nutze:
Nur mit GZIP habe ich die Komponente noch nie benutzt, sollte jedoch gehen da du es unter Windows schon benutzt hattest und es in deren Doku steht.
Ich installiere das nie und habe die Dateien in meinem Projekt einfach in einem Unterordner "Abbrevia" abgelegt und in den Projekteinstellungen > Compilereinstellungen noch in "Andere Units" und "Include-Dateien" jeweils den "Abbrevia" Ordner angefügt. Damit findet es Lazarus und man braucht es nicht installieren.
Das macht die Updates von Lazarus einfacher, da man nicht jedes mal alle Komponenten installieren muss.
Da wo du es dann brauchst bindest du die Unit "AbZipKit" mit ein, damit hast du Zugriff auf die Komponente:
Var HilfeZip: TAbZipKit;
Das war's dann. Der Download Link steht im letzten Posting.
Diverse Befehle die ich nutze:
Code: Alles auswählen
HilfeZip := TAbZipKit.Create(frmMain);
HilfeZip.Stream := TLazarusResourceStream.Create('Hilfe', 'ZIP');
HilfeZip.Count
HilfeZip.Items[i].FileName
HilfeZip.ExtractToStream(HilfeZip.Items[i].FileName, stMemoryStream);
Zuletzt geändert von MmVisual am Do 18. Jan 2024, 17:32, insgesamt 1-mal geändert.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 1470
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
- CPU-Target: 32/64Bit
Re: GZIP Datei entpacken (Linux und Windows)
Alt != deprecated.
Alt und keine Änderungen bedeutet manchmal Fehlerfrei und so gut dass man es nicht mehr verbessern braucht
Alt und keine Änderungen bedeutet manchmal Fehlerfrei und so gut dass man es nicht mehr verbessern braucht
EleLa - Elektronik Lagerverwaltung - www.elela.de
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1436
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: GZIP Datei entpacken (Linux und Windows)
HALLO was soll denn != sein.
Wir sind hier in einem Pascal Forum.
Zuletzt geändert von fliegermichl am Fr 19. Jan 2024, 18:36, insgesamt 1-mal geändert.
Re: GZIP Datei entpacken (Linux und Windows)
Warum denn nicht?
Bei dem Beispiel im Link oben muss man nur noch 2,3 Zeilen ergänzen um die Dateien im TAR "auf Platte" zu speichern. Es könnte ja auch sein, dass man es nur als Memorystream gebrauchen will, deshalb wurde das offen gelassen.
"Hausmittel" sind eigentlich immer besser, wenn es möglich ist. Damit brauchst du später nicht 3rd-Party-Code hinterherrennen.
Code: Alles auswählen
uses... ZStream, libtar;
...
procedure TForm1.Button1Click(Sender: TObject);
var
OutputStream: TMemoryStream;
DeCompressionStream: TGZFileStream;
i: integer;
Buf: array[0..1023] of byte;
TA: TTarArchive;
DirRec: TTarDirRec;
BasePath: string;
begin
if OpenDialog1.Execute then
begin
if SelectDirectoryDialog1.Execute then
begin
BasePath := IncludeTrailingPathDelimiter(SelectDirectoryDialog1.FileName);
OutputStream := TMemoryStream.Create;
DecompressionStream := TGZFileStream.Create(OpenDialog1.FileName, gzopenread);
DecompressionStream.Position := 0;
repeat
i := DecompressionStream.Read(Buf, SizeOf(Buf));
if i <> 0 then OutputStream.Write(Buf, i);
until i < SizeOf(Buf);
DecompressionStream.Free;
OutputStream.Position := 0;
TA := TTarArchive.Create(OutputStream);
TA.Reset;
ClearDirRec(DirRec);
while TA.FindNext(DirRec) do
begin
//ListBox1.Items.Add(BasePath + DirRec.Name);
ForceDirectories(ExtractFileDir(BasePath + DirRec.Name));
if ExtractFileName(BasePath + DirRec.Name) <> EmptyStr then
TA.ReadFile(BasePath + DirRec.Name);
end;
TA.Free;
OutputStream.Free;
end;
end;
end;
Re: GZIP Datei entpacken (Linux und Windows)
Erstmal Vielen Dank für Deine Antwort.
Ich gebe Dir Recht, dass man Bordmittel bevorzugen sollte. Allerdings ist das nur ein gz-Archiv und kein tar.gz. Ich habe kein tar und möchte auch keines schreiben. Ich wollte einfach nur das gz-File, welches mehrere Files enthält, direkt entpacken. Ich habe nicht verstanden, wie ich aus dem Stream heraus die Filenames ermitteln kann um sie in dem Verzeichnis wo das gz-File liegt zu entpacken. So wie man es bei zip-Files mit dem zipper machen kann. Ich benötige die Dateien auf der Platte und nicht im Memory.
Eigentlich reicht es mir sogar wenn ich den Filename des gz übergebe und er im ExtractFileDir(gzfile) die Dateien entpackt. So mache ich es jetzt mit dem TAbUnzipper => Unzipper.Filename => Unzipper.BaseDirectory => Unzipper.ExtractFiles('*.*') fertig.
Re: GZIP Datei entpacken (Linux und Windows)
Code: Alles auswählen
uses AbUnzper, AbUtils, abbrevia
...
procedure DeCompressGZipFiles(filename : TFileName);
var
UnZipper : TAbUnZipper;
begin
UnZipper := TAbUnZipper.Create(nil);
try
UnZipper.ForceType := True;
UnZipper.ArchiveType := atGzip;
UnZipper.FileName:= fileName;
UnZipper.BaseDirectory:= ExtractFilePath(filename);
UnZipper.ExtractFiles('*.*');
finally
FreeAndNil(UnZipper);
end;
end;
Re: GZIP Datei entpacken (Linux und Windows)
Das kenne ich nicht.
GZIP ist meines Wissens kein Archiv, nur eine Kompression.
https://www.tutorialspoint.com/differen ... ip-and-tar
Was ist denn das?
GZIP ist meines Wissens kein Archiv, nur eine Kompression.
https://www.tutorialspoint.com/differen ... ip-and-tar
Was ist denn das?
Re: GZIP Datei entpacken (Linux und Windows)
Da muss ich Dir Recht geben. Wir bekommen die als gz-Datei mit einigen grossen Dateien geliefert. Bis zu Deinem Hinweis habe ich noch gar nicht drüber nachgedacht, aber mit gzip haben die das Archiv wohl nicht erstellt. Die Endung ist *.gz und es ist auch kein zip-Format. Allerdings entpackt abbrevia die Dateien wie oben beschrieben mit ArchiveType := atGzip. Ich werde mal nachfragen, warum die das überhaupt so machen und was das für ein Format ist. Danke, der Hinweis war gut!theo hat geschrieben: ↑Fr 19. Jan 2024, 11:51Das kenne ich nicht.
GZIP ist meines Wissens kein Archiv, nur eine Kompression.
https://www.tutorialspoint.com/differen ... ip-and-tar
Was ist denn das?
Re: GZIP Datei entpacken (Linux und Windows)
Vielen Dank! Ihr habt mir sehr geholfen und das Highlight war: Alt != deprecated.