PackMemory() auf Linux, UnpackMemory() auf Windows -> FAIL
Verfasst: 10.12.2010 17:54
Hallo,
Ich muss unter einem Linux Server ein paar Daten mit PackMemory packen, welche dann unter Windows wieder entpackt werden müssen. Leider geht das in fast allen Fällen schief.
Unter Linux packen und Linux entpacken -> ok
Unter Linux packen und Windows entpacken -> geht nicht
Um das genauer zu untersuchen, habe ich diese beiden Test-Codes erstellt.
Pack-Code (Linux):
Entpack-Code (Windows):
Ich hab zum Testen mal die Datei INSTALL aus dem Purebasic Linux-Install genommen, mit .txt umbenannt und damit getestet. geht aber auch mit anderen Daten. Immer das gleiche Resultat.
Kann mir da jemand helfen bzw. das Problem nachvollziehen? In beiden Fällen arbeite ich auf 32 Bit Systemen (Ubuntu 10.04 LTS und Windows XP SP3).
Kukulkan
Ich muss unter einem Linux Server ein paar Daten mit PackMemory packen, welche dann unter Windows wieder entpackt werden müssen. Leider geht das in fast allen Fällen schief.
Unter Linux packen und Linux entpacken -> ok
Unter Linux packen und Windows entpacken -> geht nicht
Um das genauer zu untersuchen, habe ich diese beiden Test-Codes erstellt.
Pack-Code (Linux):
Code: Alles auswählen
SourceFile.s = "INSTALL.txt"
DestinationFile.s = "INSTALL.pak"
FilesizeUnpacked.l = FileSize(SourceFile.s)
; speicher reservieren
MemoryPointerUnpacked.l = AllocateMemory(FilesizeUnpacked.l)
MemoryPointerPacked.l = AllocateMemory(FilesizeUnpacked.l + 8)
; datei in speicher lesen
ReadFile(1, SourceFile.s)
ReadData(1, MemoryPointerUnpacked.l, FilesizeUnpacked.l)
CloseFile(1)
; datei packen
FileSizePacked.l = PackMemory(MemoryPointerUnpacked.l, MemoryPointerPacked.l, FilesizeUnpacked.l, 9)
If FileSizePacked.l < 1
Debug "Packing " + SourceFile.s + " failed!"
Else
; speichern
If FileSize(DestinationFile.s) > -1: DeleteFile(DestinationFile.s): EndIf
If OpenFile(1, DestinationFile.s)
WriteData(1, MemoryPointerPacked.l, FileSizePacked.l)
CloseFile(1)
Debug "Filesize before: " + Str(FilesizeUnpacked.l) + " bytes"
Debug "Filesize after : " + Str(FilesizePacked.l) + " bytes"
Debug "File saved. Finished."
Else
Debug "Error writing " + DestinationFile.s
EndIf
EndIf
Code: Alles auswählen
SourceFile.s = "INSTALL.pak"
FilesizePacked.l = FileSize(SourceFile.s)
If FilesizePacked.l < 1: Debug "Can not open file " + SourceFile.s: End: EndIf
; speicher reservieren
MemoryPointerPacked.l = AllocateMemory(FilesizePacked.l)
MemoryPointerUnpacked.l = AllocateMemory(FilesizePacked.l * 4) ; 4 faches reservieren
; datei in speicher lesen
ReadFile(1, SourceFile.s)
ReadData(1, MemoryPointerPacked.l, FilesizePacked.l)
CloseFile(1)
; datei entpacken
FilesizeUnpacked.l = UnpackMemory(MemoryPointerPacked.l, MemoryPointerUnpacked.l)
If FileSizeUnpacked.l < 1
Debug "Unpacking " + SourceFile.s + " failed!"
Else
Debug "Successfully extracted file to " + Str(FilesizeUnpacked.l) + " bytes"
EndIf
Kann mir da jemand helfen bzw. das Problem nachvollziehen? In beiden Fällen arbeite ich auf 32 Bit Systemen (Ubuntu 10.04 LTS und Windows XP SP3).
Kukulkan