Packer-Library

Anfängerfragen zum Programmieren mit PureBasic.
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Packer-Library

Beitrag von lite »

Hallo

In der Hilfe steht, das PureBasic interne Packerfunktionen besitzt.
Bis jetzt funktioniert alles sehr gut.
PureBasic entpackt die Datei so wie es soll, nur werden die Attribute nicht übernommen.
Es ist möglich die Attribute selber zu setzen, aber wen man nicht abfragen kann, ob sie gesetzt sind, dann wird es schwer.
Ist es irgendwie möglich diese Informationen zu bekommen ?
Externe Dateien wie z.B. 7z.dll möcht ich nicht verwenden.

Kann jemand weiter helfen ?

Grüße
Lite
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Packer-Library

Beitrag von ts-soft »

Wenn es das ZipFormat sein soll und nur unter Windows laufen darf (oder eingeschränkt unter Linux),
dann kannste das ZipEx Modul verwenden, um Dateiattribute im FileComment zu speichern, um sie
wiederherzustellen.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: Packer-Library

Beitrag von lite »

@Thomas

Vielen Dank. Das sieht schon mal sehr beeindruckend aus.
Gibts sowas auch für das Dateiformat .7z ?
Entpacken würde reichen

Lite
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: Packer-Library

Beitrag von lite »

Hallo

Mir ist vorhin was seltsames aufgefallen.
Meiner Meinung ist es ein Bug in der 7z-Library.
Der Fehler tritt nur auf, wen mehrere Dateien im Paket sind.
Wen die erste Datei eine große Datei ist, dauert das entpacken der nachfolgenden Dateien auch sehr lange. Gefühlt so lange wie die grosse Datei, obwohl sie nur ganz klein sind.

Ein Beispiel:

Dateien die in der Paket.7z Datei sind.

1. Datei: a-test.zip (Größe: 40 MB)
2. Datei: info.txt ( 50 kb)
3. Datei: Bild.jpg ( 100 kb)

Hier mein Code:

Code: Alles auswählen

UseLZMAPacker()
TargetDir$="c:\test3\"
 ; Öffnet die gepackte Datei
  If OpenPack(0, "c:\test1\Paket.7z", #PB_PackerPlugin_LZMA) 
    ; Listet alle Einträge auf
    If ExaminePack(0)
      While NextPackEntry(0)
        Debug "Name: " + PackEntryName(0) + ", Size: " + PackEntrySize(0)+"--"+TargetDir$+PackEntryName(0)
        MessageRequester("vor",PackEntryName(0))
        ret = UncompressPackFile(0,TargetDir$+PackEntryName(0),PackEntryName(0))
        MessageRequester("","nach")
      Wend
    EndIf
    ClosePack(0)
  EndIf

Sollte es ein Fehler sein, könnte es jemand unter Bugs im englischen Forum posten.
Da mein Englisch alles andere als verständlich ist. Danke.

Grüße

Lite
--
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Packer-Library

Beitrag von _JON_ »

Hallo lite,

das könnte dran liegen das deine .7z solide gepackt wurde. (Ist glaube ich Standard bei 7-zip)
Dann müss bei jedem extrahieren der gesamte block dekomprimiert werden und das dauert.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: Packer-Library

Beitrag von lite »

Das Problem daran ist, wen wir das oben genannte Beispiel nehmen.
Dauert das entpacken der 3 Dateien ca. 30 Sekunden.
Weil die erste Datei (große) schon 10 Sekunden braucht.

Würde ich jetzt die grosse Datei aus dem Paket nehmen,
dauert das entpacken der zwei kleinen Dateien nur 2 Sekunden.
Das kann doch nicht sein.

Lite
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Packer-Library

Beitrag von _JON_ »

Pack die 7z mal neu und setze die "solid block size" zu non-solid

Dieses Archive sollte dann so schnell sein wie Du meinst.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: Packer-Library

Beitrag von lite »

@John

Jetzt geht es schneller.
Nur kann das nicht die Lösung sein, da die Pakte nicht von mir kommen.
Normalerweise sind in den Paketen ein paar hunderte Dateien enthalten.
Das entpacken dauert dann eine Ewigkeit, das kann kein Mensch erwarten.
So wie die Library jetzt ist, ist sie für mich unbrauchbar. :cry:

Lite
Benutzeravatar
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Packer-Library

Beitrag von Sicro »

lite hat geschrieben:So wie die Library jetzt ist, ist sie für mich unbrauchbar.
Die Library kann dafür nichts, sondern der Solid-Block-Modus mit dem die Pakete gepackt sind, wie _JON_ schon geschrieben hat.

Bei diesem Modus werden alle Dateien als eine Datei betrachtet und gepackt. Dadurch ist es nicht möglich, einzelne Dateien zu entpacken, ohne die vorherigen Dateien ebenfalls zu entpacken.
Ausführlichere Informationen findest du hier: http://de.wikipedia.org/wiki/Progressive_Kompression
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: Packer-Library

Beitrag von lite »

Hallo

Ja, jetzt hab ich verstanden wo das Problem liegt. Vielen Dank.
Mir ist das gar nicht aufgefallen, das es bei 7z.exe auch so ist.
Der kleine Unterschied, das 7z.exe gleich mehrere Dateien auf einmal rausholt.
Dadurch merkt man den Effekt nicht.
PureBasic dagegen holt immer nur eine Datei raus.
Deshalb dieser enorme Geschwindigkeitsunterschied.
Würde Purebasic auch mehrere Dateien entpacken wäre es perfekt.

Z.B. mit einen neuen Befehl:

FileList$ ="a-test.zip:info.txt:Bild.jpg"
UncompressPackFileList (0,TargetDir$,FileList$)

oder unterstützt der Decompress-Befehl Dateilisten ?

Grüße

Lite
Antworten