Wie einzelne Datei entpacken?

Anfängerfragen zum Programmieren mit PureBasic.
Syntacks_Error
Beiträge: 107
Registriert: 08.03.2009 16:08

Wie einzelne Datei entpacken?

Beitrag von Syntacks_Error »

Code: Alles auswählen

Procedure CreatePackfile() ; erzeugt gepackte Datei
 file = CreateFile(#PB_Any,"test.txt")
 For x = 1 To 100
  WriteStringN(file, "1234567890")
 Next
 laenge = Lof(file)
 FileSeek(file,0)
 
 *quelle = AllocateMemory(laenge)
 ReadData(file,*quelle,laenge)
 
 *ziel = AllocateMemory(laenge+8)
 laengePak = PackMemory(*quelle, *ziel, laenge,9)
 
 filePak = CreateFile(#PB_Any,"test.txt.pak")
 WriteData(filePak,*ziel,laengePak)
 
 FreeMemory(*quelle)
 FreeMemory(*ziel)
 CloseFile(file)
 CloseFile(filepak)
EndProcedure

Procedure UnPackfile() ; entpacken
 file = OpenPack("test.txt.pak") 
 Debug file
 ;*mem = NextPackFile() ; ergibt Crash
 laenge = PackFileSize() 
 Debug laenge ; ergibt 0
EndProcedure

CreatePackfile()
UnPackfile()
Das Packen geht ja, aber wie geht das Entpacken? Dieses "NextPackfile" scheint eher für Archive gedacht zu sein und PackfileSize ergibt immer "0". OpenPak() gibt zwar "1", aber damit kann ich nichts anfangen. Wie komme ich an die Laenge der entpackten Datei heran, die ich ja für UnpackMemory(QuellSpeicherID, ZielSpeicherID) brauche, da ich ja wohl vorher den Speicher allocieren muß?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Wie einzelne Datei entpacken?

Beitrag von STARGÅTE »

in der Hilfe steht das OpenPack nur dafür ist, wenn die Datei auch mit CreatePack gepackt wurde, das sehe ich nicht bei dir.

soll heißen du musst die datei erst nortmal mit Read-Befehlen einlesen und dann das UnpackMemory nutzen
wenn du die Datei in speicher gelsene hast
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Syntacks_Error
Beiträge: 107
Registriert: 08.03.2009 16:08

Re: Wie einzelne Datei entpacken?

Beitrag von Syntacks_Error »

Tatsächlich, damit und mit addpackmemory beim Verpacken gehts:

Code: Alles auswählen

Procedure CreatePackfile()
 file = CreateFile(#PB_Any,"test.txt")
 For x = 1 To 100
  WriteStringN(file, "1234567890")
 Next
 laenge = Lof(file)
 FileSeek(file,0)
 
 *quelle = AllocateMemory(laenge)
 ReadData(file,*quelle,laenge)
 
 filePak = CreatePack("test.txt.pak")
 Ergebnis = AddPackMemory(*quelle, laenge,9)
 ClosePack()

 FreeMemory(*quelle)
 CloseFile(file)
 
 
EndProcedure


Procedure UnPackfile()
file = OpenPack("test.txt.pak")
Debug file
*mem = NextPackFile() 
debug *mem
laenge = PackFileSize()
Debug laenge 

Text$ = PeekS(*mem,laenge)
Debug text$ 
 
EndProcedure

CreatePackfile()
UnPackfile()
Antworten