Seite 1 von 2

Packen und Entpacken

Verfasst: 06.10.2006 12:44
von Maddin
Ich habe eine Frage:
Wenn man jetzt ganz normal ein paar Dateien verpackt, wie krieg ichs dann hin, diese Dateien ganz normal an einen auswählbaren Speicherort zu entpacken? Ich kriegs einfach nich raus :oops:

Schon mal Danke für Antworten

Re: Packen und Entpacken

Verfasst: 06.10.2006 13:32
von Kiffi
> Wenn man jetzt ganz normal ein paar Dateien verpackt, wie krieg ichs
> dann hin, diese Dateien ganz normal an einen auswählbaren Speicherort zu
> entpacken?

die einfachste Vorgehensweise ist die Verwendung von CreatePack() und
OpenPack(). Hier mal ein simples Beispiel (die Pfade sind vorher
anzupassen):

Code: Alles auswählen

; Packen
If CreatePack("c:\DeinPack.pak") 
  AddPackFile("C:\DeineDatei.txt") 
  ClosePack()
Else
  Debug  "!"
EndIf
  
; Entpacken
If OpenPack("c:\DeinPack.pak")
  SpeicherAdresse  = NextPackFile()
  If SpeicherAdresse 
    Groesse = PackFileSize() 
    FF = CreateFile(#PB_Any, "C:\DeineDatei2.txt")
    If FF
      WriteData(FF ,SpeicherAdresse, Groesse)
      CloseFile(FF) 
    Else
      Debug  "!"
    EndIf
  Else
    Debug  "!"
  EndIf
  ClosePack()
Else
  Debug  "!"
EndIf
Grüße ... Kiffi

P.S.: Schreib mal bitte Deine PB-Version in Deine Signatur. Danke!

Re: Packen und Entpacken

Verfasst: 06.10.2006 13:34
von rolaf
Maddin hat geschrieben:Ich habe eine Frage:
Wenn man jetzt ganz normal ein paar Dateien verpackt, wie krieg ichs dann hin, diese Dateien ganz normal an einen auswählbaren Speicherort zu entpacken? Ich kriegs einfach nich raus :oops:

Schon mal Danke für Antworten
Hallo,

vor kurzem war hier mal ein Thread dazu. Vielleicht hilft Dir aber der folgende kurze Codeschnipsel für PB4 schon weiter:

Code: Alles auswählen

 
  CreatePack("C:\test.pak")
    AddPackFile("C:\test.txt",9)
  ClosePack()

  OpenPack("C:\test.pak")
    *Speicheradresse=NextPackFile()
    CreateFile(1,"C:\test_wieder_entpackt.txt")
    WriteData(1,*Speicheradresse,PackFileSize())
    CloseFile(1)
  ClosePack()

Hurra

Verfasst: 06.10.2006 14:23
von Maddin
Vielen Dank für die Beiträge, ich habs gecheckt, ich brauchte auch nur die richtige Anwendungsweise von openpack() und den restlichen erforderlichen Befehlen wissen. nur eine Frage: wie erkenne ich jetzt, was für einen Dateityp ich da entpacke (z.B. .mp3)?
Ich bin nämlich grad dabei, ein kleines Packprogramm zu schreiben und das würde halt sehr helfen. Schon mal Dank im voraus!

Re: Hurra

Verfasst: 06.10.2006 14:36
von Kiffi
Maddin hat geschrieben:Ich bin nämlich grad dabei, ein kleines Packprogramm zu schreiben
Karl hat hier einen kleinen Packer geschrieben.
Dürfte eine Inspirationsquelle für Dich sein ;-)

Grüße ... Kiffi

Verfasst: 06.10.2006 14:47
von Fluid Byte
Vielen Dank für die Beiträge, ich habs gecheckt, ich brauchte auch nur die richtige Anwendungsweise von openpack() und den restlichen erforderlichen Befehlen wissen. nur eine Frage: wie erkenne ich jetzt, was für einen Dateityp ich da entpacke (z.B. .mp3)?
Gar nicht, jedenfalls nicht mit der PB's PACK Library. Der einzige weg ist die nötigen Details (Größe, Typ, Name, etc.) in einer Datei zu speichern. Entweder extern oder in deinem Archiv selber.

Beispiel:

Code: Alles auswählen

Structure PACKDATA
	Name.s
	Size.l
EndStructure

NewList pdat.PACKDATA()

Procedure AddPackData(Filename.s)
	AddElement(pdat())
	
	pdat()\Name = Filename
	pdat()\Size = FileSize(Filename)
EndProcedure

; Pack Dateien temporär in eine LinkedList laden
AddPackData("myFile1.mp3")
AddPackData("myFile2.txt")
AddPackData("myFile3.bmp")
; ...........

; Archiv Struktur erstellen
Result = CreateFile(#PB_Any,"Index.dat")

ForEach pdat()
	WriteWord(ListIndex(pdat()))
	WriteString(pdat()\Name) : WriteByte(0)
	WriteLong(pdat()\Size)
Next

CloseFile(Result)

; Archiv erstellen
CreatePack("myArchive.pak")

; Archiv Struktur hinzufügen
AddPackFile("Index.dat",4)

; Dateien hinzufügen
ResetList(pdat())

ForEach pdat()
	AddPackFile(pdat()\Name)
Next

; Archiv schließen
ClosePack()

Verfasst: 06.10.2006 17:01
von Maddin
OK, es läuft schon besser ;-), aber ein paar Probleme gibts noch: kann mir jemand sagen, wo hier der Fehler liegt??

Code: Alles auswählen

 datei$ = OpenFileRequester("Archiv öffnen","C:\","VMeA-Archiv (*.vmea)|*.vmea",0)
pfad1$ = PathRequester("Ordner wählen","C:\")
If datei$ <> "" And pfad1$ <> ""
 OpenPack(datei$)
  Repeat
   adresse = NextPackFile()
   CreateFile(0,"Willi.txt")
    WriteData(0,adresse,PackFileSize())
   CloseFile(0)
   OpenFile(0,"Willi.txt")
    text$ = ReadString(0)
   CloseFile(0)
   DeleteFile("Willi.txt")
   adresse2 = NextPackFile()
   CreateFile(0,pfad1$+text$)
    WriteData(0,adresse2,PackFileSize())
   CloseFile(0)
   
   
   
  Until PackFileSize() = 0
 ClosePack()
EndIf

Danke!

Verfasst: 06.10.2006 17:38
von Kiffi
> kann mir jemand sagen, wo hier der Fehler liegt??

wenn Du uns sagst, was für ein Fehler das ist.

Zum Code selber: Du bist Dir bewusst, dass Du keinerlei
Fehlerabfangmaßnahmen getroffen hast?

Grüße ... Kiffi

Verfasst: 06.10.2006 18:24
von rolaf
>pfad1$+text$

So können wir nur natürlich nur raten, evt. liegt es am fehlenden Backslash
also probier mal pfad1$ + "\" + text$

Edit: Das wars nicht, der Backslash wir vom PathRequester mitgeliefert. Ist den beim Packen auch kein Fehler passiert?

Verfasst: 06.10.2006 19:10
von #NULL
@Maddin: fehler einkreisen:

Code: Alles auswählen

datei$ = OpenFileRequester("Archiv öffnen","C:\","VMeA-Archiv (*.vmea)|*.vmea",0)
pfad1$ = PathRequester("Ordner wählen","C:\")
If datei$ And pfad1$
 If OpenPack(datei$)
  Repeat
   adresse = NextPackFile()
   If CreateFile(0,"Willi.txt")
    WriteData(0,adresse,PackFileSize())
    CloseFile(0)
   Else:Debug "error:createfile 1"
   EndIf
   If OpenFile(0,"Willi.txt")
    text$ = ReadString(0)
    CloseFile(0)
   Else:Debug "error:openfile"
   EndIf
   DeleteFile("Willi.txt")
   adresse2 = NextPackFile()
   If CreateFile(0,pfad1$+text$)
    WriteData(0,adresse2,PackFileSize())
    CloseFile(0)
   Else:Debug "error:createfile 2"
   EndIf
  Until PackFileSize() = 0
  ClosePack()
 Else
  Debug "error:openpack"
 EndIf
Else
  Debug "string error:"+datei$
  Debug "string error:"+pfad$
EndIf