Mahlzeit @all,
ich würde gerne wissen, ob ich mit dem Befehl: "OpenPack()" nur Lese- oder auch Schreibzugriff auf die Pack-Datei habe, also meinen Versuchen nach zu urteilen, ist dem nicht so aber wie kann ich dann Dateien zu einer bereits vorhandenen Pack-Datei hinzufügen?
Dateien zu einer bereits bestehenden Pack-Datei hinzufügen
-
- Beiträge: 63
- Registriert: 25.12.2009 18:48
Re: Dateien zu einer bereits bestehenden Pack-Datei hinzufügen
ALso ich habe mal in der Hilfe gesucht, obwohl ich noch nie davon etwas gehört habe und bin auf folgenden -hoffentlich nützlichen- Eintrag gestoßen:
AddPackMemory
oder:
AddPackFile
Du solltest beide ausprobieren. Wie gesagt, habe keinen Plan;)
mfg
Nathaniel
ps: die Hilfe ist nützlich und beinhaltet auch ein Kapitel über "Packs";)
AddPackMemory
oder:
AddPackFile
Du solltest beide ausprobieren. Wie gesagt, habe keinen Plan;)
mfg
Nathaniel
ps: die Hilfe ist nützlich und beinhaltet auch ein Kapitel über "Packs";)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Dateien zu einer bereits bestehenden Pack-Datei hinzufügen
OpenPack() ist wohl falsch gewählt, ReadPack() würde es eher treffen. Hinzufügen ohne komplette
Neuerstellung ist wohl nicht.
Am besten einen eigenes Containerformat entwickeln, wo Du mehr Möglichkeiten hast, sowie
mit Checksummen die Dateien prüfst, die Namen mit Angibst usw., oder gleich PureDataConvertor
nutzen
Gruß
Thomas
Neuerstellung ist wohl nicht.
Am besten einen eigenes Containerformat entwickeln, wo Du mehr Möglichkeiten hast, sowie
mit Checksummen die Dateien prüfst, die Namen mit Angibst usw., oder gleich PureDataConvertor
nutzen

Gruß
Thomas
Re: Dateien zu einer bereits bestehenden Pack-Datei hinzufügen
die namen der dateien sind mir eigentlich relativ egal... aber ok, dann werd ich mal sehen, was sich machen lässt, wenn nicht, dann melde ich mich nochmal
-
- Beiträge: 213
- Registriert: 13.07.2008 10:05
- Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660
Re: Dateien zu einer bereits bestehenden Pack-Datei hinzufügen
Folgenden Code habe ich mal vor einiger Zeit geschrieben der kann mit Archiven umgehen die mit den PureBasic befehlen erstellt wurden und erstellt auch die eigenen in dem Format. Durch die Unterscheidung zwischen OpenPackX nur zum weiter rein packen und ReadPackX zum auslesen gibt es dabei keine solches Problem mehr wie du hast. Vielleicht hilft dir der Code ja irgendwie auch wenn ich dir raten würde einmal richtige Packfunktionen selbst zu schreiben dann kannst dir ein Dateiformat nach Wahl anlegen und alles drin speichern was du willst (Checksummen, Dateiname, usw.).
Beispiel: (braucht zwei Bildern musst im Code halt den Namen von den Bildern an eigene anpassen dann kannst es Testen)
mfg Christian+
Code: Alles auswählen
Global packx_file.i
Global packx_size.l
Global *packx_memory
Procedure.i ReadPackX(FileName$)
packx_file = ReadFile(#PB_Any, FileName$)
ProcedureReturn packx_file
EndProcedure
Procedure.i OpenPackX(FileName$)
packx_file = OpenFile(#PB_Any, FileName$)
FileSeek(packx_file, Lof(packx_file))
ProcedureReturn packx_file
EndProcedure
Procedure.i NextPackFileX()
Protected *memory, size.l, error.l
packx_size = ReadLong(packx_file)
If packx_size = 0
ProcedureReturn 0
EndIf
size = ReadLong(packx_file)
*memory = AllocateMemory(size)
ReadData(packx_file, *memory, size)
If *packx_memory<>0
FreeMemory(*packx_memory)
EndIf
*packx_memory = AllocateMemory(packx_size)
packx_size = UnpackMemory(*memory, *packx_memory)
FreeMemory(*memory)
ProcedureReturn *packx_memory
EndProcedure
Procedure.l PackFileSizeX()
ProcedureReturn packx_size
EndProcedure
Procedure ClosePackX()
If *packx_memory<>0
FreeMemory(*packx_memory)
*packx_memory = 0
EndIf
CloseFile(packx_file)
EndProcedure
Procedure.i CreatePackX(FileName$)
packx_file = CreateFile(#PB_Any, FileName$)
ProcedureReturn packx_file
EndProcedure
Procedure AddPackMemoryX(*MemoryAddress, Length, CompressionLevel=9)
Protected *memory, size.l, error.l
size = Length+8
*memory = AllocateMemory(size)
size = PackMemory(*MemoryAddress, *memory, Length, CompressionLevel)
WriteLong(packx_file, Length)
WriteLong(packx_file, size)
WriteData(packx_file, *memory, size)
FreeMemory(*memory)
EndProcedure
Procedure AddPackFileX(FileName$, CompressionLevel=9)
Protected *memory, file.i, size.l
file = ReadFile(#PB_Any, FileName$)
size = Lof(file)
*memory=AllocateMemory(size)
ReadData(file, *memory, size)
CloseFile(file)
AddPackMemoryX(*memory, size, CompressionLevel)
FreeMemory(*memory)
EndProcedure
Code: Alles auswählen
CreatePack("test.pak")
AddPackFile("bild1.bmp")
ClosePack()
OpenPackX("test.pak")
AddPackFileX("bild2.bmp")
ClosePackX()
OpenPack("test.pak")
CatchImage(1, NextPackFile())
CatchImage(2, NextPackFile())
SaveImage(1, "bild1new.bmp")
SaveImage(2, "bild2new.bmp")
ClosePack()
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660