Seite 1 von 1

Packer Problem

Verfasst: 26.08.2005 01:08
von benpicco
Ich wollte einen Ordner zum hochladen packen, den das Programm bei der ersten ausführung wieder entpackt. Leider habe ich ein Problem mit dem entpacken...
Die Dateinamen werden nicht mehr richtig ausgelesen! Was mache ich falsch?

Code: Alles auswählen

Procedure pack()
CreatePack("gfx.pck")
ExamineDirectory(1,"gfx_save","*.bmp")
Repeat
  typ=NextDirectoryEntry()
  If typ=1
    *id=AllocateMemory(MemoryStringLength(*DirectoryEntryName()))
    PokeS(*id,DirectoryEntryName())
    If AddPackMemory(*id,MemoryStringLength(*DirectoryEntryName()),9)
    Debug PeekS(*id)
  EndIf
  FreeMemory(*id)
  AddPackFile("gfx_save\"+DirectoryEntryName(),9)
  EndIf
Until typ=0
ClosePack()
EndProcedure
Procedure unpack()
  CreateDirectory("gfx")
  OpenPack("gfx.pck")
  X=0
  Repeat
    Nextpf=NextPackFile()
    *id=AllocateMemory(Nextpf)
    Debug *id
    ;If *id
    *unpack=AllocateMemory(Nextpf+PackFileSize())
    len=UnpackMemory(*id,*unpack)
    file$=PeekS(*unpack,len)
    Debug file$
    If file$
    FreeMemory(*id)
    *id=AllocateMemory(NextPackFile())
    ;file$=Str(X)+".bmp"
    CreateFile(1,"gfx\"+file$)
    WriteData(*id,PackFileSize())
    CloseFile(1)
    FreeMemory(*id)
    FreeMemory(*unpack)
  Else
    Break
  EndIf
  
  
  Until PackFileSize()=0 Or error=1
  ClosePack()
EndProcedure
unpack();/pack()

Verfasst: 26.08.2005 01:16
von Laurin
Mein Packen schreibst du die Dateinamen rein (PokeS(*id,DirectoryEntryName())), aber danach überschreibst du den Namen mit der zu packenden Datei.

Die Zeile danach müsste so lauten:

Code: Alles auswählen

If AddPackMemory(*id + Len(DirectoryEntryName()),MemoryStringLength(*DirectoryEntryName()),9)

Verfasst: 26.08.2005 01:42
von benpicco
Äh, naja, vorher stand der Dateiname noch in der gepackten Datei, wenn man sie mit dem Texteditor geöffnet hat, jetzt nichtmehr... (das Ergebiniss ist das selbe)
Naja, ich werd die mir das morgen, äh, heute nochmal angucken...