Hallo liber H. Brill,
unterdessen hab ich mir Dein Beispiel angeschaut.
Wirkich Interesnt,
Das pak File an und für sich wird nun korrekt erstellt,
konnte ich so testen, als, dass das pak File eine ZIP Datei ist.
Wo ich hingegen komplett falsch lag, war mit der Annahme, dass die
Speichergrößen wichtig wären für den ein resp. auspacken.
Zumindest habe ich es so verstanden,
denn wenn ich bei Deinem Beispiel Debug auf die
pufer 1 - 3
mache, bekomme ich bei jedem Start einen anderen Wert.
Also muss der Hase anderswo mir die Eier bemalt und versteckt haben.
Auch verwendest Du PeekS und PokeS
dort der Len() in Textform vorhanden ist.
Bei meinem Beispiel Len() der ungepackte PackEntrySize() ausgibt.
resp. beim Packen
FileLength aus geöffneter und gelesenem SourceFile
Ich mache jetzt eine Annahme dadurch, dass das Packen funktioniert
Liegt das Problem nicht daran.
EDIT:
Unterdessen muss ich bei meinen Erkentnissen etwas Revidieren.
Ich war der Annahme dass der Code Teil:
Code: Alles auswählen
UnPackErg = UncompressMemory(ReadMePak, MHndl1,ReadMePakEnd, unkompress_puffer)
Korrekt ist.
Was er wahrscheinlich doch nicht ist.
Da ich aus dem Original Code:
Die Anpassung auf UncompressMemory übertragen habe ist wohl dort der Fehler nehme ich momentan an.
Beim Spielen mit demm Code, Debug Funktion ist herausgekommen
UnPackErg ergibt wie ich es kehre wende
und mache Versuche immer -1
Oder
Code: Alles auswählen
UnPackErg = UncompressMemory(Speicher_1, Speicher_2, Speicher_3, Speicher_4)
Nehme ich hingegen die Hilfe zu Rate ergibt sich ein gänzlich anderes Szenario:
Code: Alles auswählen
Ergebnis = UncompressMemory(*Puffer, Größe, *Ausgabe, AusgabeGröße [, PluginID])
Zu beachten bei mir KEIN Verweis auf die Pak resp, das File.
Anschliessend bedeutet das,
Code: Alles auswählen
Ergebnis = UncompressMemory(*SourceFile_TXT, Speichergröße 1, Puffer_1, Dateiname_pak[, PluginID])
Oder
Code: Alles auswählen
UncompressMemory(Readme.txt, 123456789, 1024, ReadMMe.pak)
Somit das übertragen auf das UncompressMemory() Falsch bewerstelligt.
Wahrscheinlich habe ich genau dies bereits einmal früher Diskutiert.
Ich muss mal schauen, ob ich schlau werde.... Hilfe Fragen ohne zu wissen was ergibt -1.
EDIT ende:
Sicherlich, Axolotl wird mit großer Bestimmtheit, so auch Du, mir einwenden, Suche F1 verwenden, wo ich momentan noch
keinen Plan habe, wonach ich, den hier suchen müsste.
Wahrscheinlich liege ich auch völlig daneben mit meinen Vermutungen.
Doch das wäre so meine Flickwerk aus CompressMemory und UncompressMemory Verständnins
Unter Umständen habe ich noch einen klitzekleinen Gedankenfehler, wo dieses dumme
Ding
MHndl1 doch noch benötigt wird oder ich falsch isoliert habe bei meiner Recherche.
In der Hoffnung ich kriege es raus, ohne dass Ihr mir die Lösung bereitstellt
mache ich mich wieder ans Werk.
Liebe Grüsse
Christian
H.Brill hat geschrieben: 24.12.2024 09:30
Denn unter LZMA wurde besagte Datei mit 0 Byte erstellt oder überhaupt nicht.
Bei mir geht LZMA auch nicht, nur ZIP. Ich haber aber auch kein entsprechendes PlugIn installiert.
Da kommt aber auch eine entsprechende Fehlermeldung, daß das Plugin nicht installiert ist.
Ich würde den ZIP-Packer bevorzugen. Der ist ja seit ein paar Windowsversionen standardmäßig
dabei. Bei LZMA muß dein Anwender ja auch den entsprechenden Packer installiert haben.
Damit nötigst du ihn, diesen auch zu installieren.
Hast du nur eine einzelne Datei zu packen oder sind das mehrere ?
Eine einzelne Datei geht auch so :
Code: Alles auswählen
textdatei.s = "F:\text.txt" ; Pfade anpassen
packdatei.s = "F:\text.pak"
If OpenFile(0, textdatei)
length = Lof(0)
*Buffer1 = AllocateMemory(length)
*Buffer2 = AllocateMemory(length)
ReadData(0, *Buffer1, length)
CloseFile(0)
EndIf
UseZipPacker()
Debug PeekS(*Buffer1, length, #PB_Ascii)
CompressMemory(*Buffer1, MemorySize(*Buffer1), *Buffer2, MemorySize(*Buffer2), #PB_PackerPlugin_Zip )
If CreateFile(1, packdatei)
WriteData(1, *Buffer2, MemorySize(*Buffer2))
CloseFile(1)
EndIf
FillMemory(*Buffer2, length) ; *Buffer2 leeren zum späteren Befüllen mit UnCompressMemory()
FillMemory(*Buffer1, length)
If OpenFile(2, packdatei)
length = Lof(2)
ReadData(2, *Buffer1, length)
UncompressMemory(*Buffer1, MemorySize(*Buffer1), *Buffer2, MemorySize(*Buffer2), #PB_PackerPlugin_Zip )
Debug "der entkomprimierte Text : " + Chr(13) + PeekS(*Buffer2, MemorySize(*Buffer2), #PB_Ascii)
EndIf
FreeMemory(*Buffer1)
FreeMemory(*Buffer2)
In der Debug-Ausgabe siehst du, daß der Text zweimal da ist.