Seite 1 von 1

Wie einzelne Datei entpacken?

Verfasst: 27.11.2009 18:34
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ß?

Re: Wie einzelne Datei entpacken?

Verfasst: 27.11.2009 18:41
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

Re: Wie einzelne Datei entpacken?

Verfasst: 27.11.2009 19:03
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()