Packen und Entpacken

Anfängerfragen zum Programmieren mit PureBasic.
Maddin
Beiträge: 9
Registriert: 23.09.2006 15:39
Wohnort: Beverly Hüls
Kontaktdaten:

Packen und Entpacken

Beitrag 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
Website: www.senyl.de

Momentan auf der Suche nach Netzwerk-Artikeln... DIE BRAUCHEN EIN EIGENES FORUM! ;)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Packen und Entpacken

Beitrag 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!
a²+b²=mc²
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Packen und Entpacken

Beitrag 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()
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Maddin
Beiträge: 9
Registriert: 23.09.2006 15:39
Wohnort: Beverly Hüls
Kontaktdaten:

Hurra

Beitrag 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!
Website: www.senyl.de

Momentan auf der Suche nach Netzwerk-Artikeln... DIE BRAUCHEN EIN EIGENES FORUM! ;)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Hurra

Beitrag 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
a²+b²=mc²
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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()
Maddin
Beiträge: 9
Registriert: 23.09.2006 15:39
Wohnort: Beverly Hüls
Kontaktdaten:

Beitrag 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!
Website: www.senyl.de

Momentan auf der Suche nach Netzwerk-Artikeln... DIE BRAUCHEN EIN EIGENES FORUM! ;)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag 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?
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten