Packer Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Packer Problem

Beitrag 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()
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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)
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag 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...
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Antworten