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
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
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