da meine projecte immer mehr dateien enthalten und ich nicht 20 texturen einzeln mitgeben möchte, möchte ich gern ein container-format entwickeln/nutzen
sodass ich eben nicht ganz viele texturen habe sondern wie wir es von guten programmen kennen 1 container-file wie zb .mpq oder .mat
Du könntest statt der Größe der Datei einen Pointer auf deren Anfang speichern. Die Größe bekommst du dann in dem du dir den Pointer der nächsten Datei anschaust. Wenn du nur die Größe speicherst musst du etwas mal den ganzen Header und die Größen aller Dateien einlesen, auch wenn du nur eine einzige Datei brauchst. Andererseits willst du den Header vermutlich sowieso im Speicher halten.
Edit: Schon mal gegooglet ob's nicht vielleicht was fertiges gibt? Du bist ja sicher nicht der erste mit diesem Problem.
gegoogelt hab ich schonmal ja aber nichts passendes gefunden, nur wenn leute mit ihrem fertigen containern probleme hatten
und wegen dem header, eigentlich hatte ich mir das so vorgestellt dass beim programmstart die datei geöffnet wird ihr inhalt komplett ausgelesen und verarbeitet und dann die datei wirder geschlossen wird.
ich werde die dateien dann so sortieren das immer nur 1 max 2 container benötigt werden (1 mit allgemeneine daten und 1 mit spezifischen zb)
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Also FreePascal liefert einen Header für das tar-Format mit. Damit habe ich auch schon gearbeitet, wenn man mag kann man das dann auch noch durch die zlib-Streams jagen und komprimieren.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich denke auch, das tar ausreichend ist und du dir die Zeit sparen kannst etwas eigenes zu machen. Wenn du nicht gerade die Datein über INet streamen willst oder das letzte bit/s lesegeschwindigkeit raus kitzeln willst, reicht das völlig.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Hier meine Container Implementierung in 2 Std mit Lazarus gebastelt.
Ist ne simpel TForm app wo man Container laden und die dateien die darin sind herunterladen kann. Erstellen von Container ist da auch mit drin. Dateien per listview hinzufügen, auf save drücken, Dateiname wählen, Fertig.
Source sollte leicht verständlich sein.
Fehler habe ich nach 2-3x durchklicken nicht gefunden, aber verbessern kann man da einiges noch.
Viel spass damit.
In Unit uContainer ist der source dazu.
Das ganze ist eigentlich ne art Virtuelles Dateisystem.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Finalspace am Di Okt 05, 2010 14:18, insgesamt 1-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Wenn du ganz viel Lust hast, kannst du auch mal meine uralte Idee vom MetaVFS umsetzen. In der Spezifikation ist alles drin, was man brauchen könnte - daher ist es ziemlich komplex und ich habe es selber noch nicht implementiert.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Apr 09, 2009 12:51 Beiträge: 53
Programmiersprache: Lazarus
Vllt. wäre noeska´s VFS etwas für dich. Ich weiß aber noch nicht wie ausgereift das ist. (btw: Ich hab auch ab nächste Woche Urlaub und ein VFS steht auch auf meiner todo. Mal schaun ob ich dazu komme)
ok als erstes habe ich mir den vorschlag von finalspace angeschaut das sieht vielversprechend aus allerdings gibt es dazu noch paar unklarheiten
diese beiden units fehlen mir gänzlich
Code:
FileUtil, LResources,
und die klasse TFPHashList hab ich nur unter C++ gefunden, ich hab schon versucht diese gegen eine TList ode eine THashedStringList auszutauschen aber das ist alles nicht wirklich dasselbe
vieleicht könntest du das nochmal bisschen erläutern?
ich schau mir nun erstmal die anderen vorschläge an
€ bei den VFS bin ich mir noch nicht ganz klar was das sein soll XD
ok als erstes habe ich mir den vorschlag von finalspace angeschaut das sieht vielversprechend aus allerdings gibt es dazu noch paar unklarheiten
diese beiden units fehlen mir gänzlich
Code:
FileUtil, LResources,
und die klasse TFPHashList hab ich nur unter C++ gefunden, ich hab schon versucht diese gegen eine TList ode eine THashedStringList auszutauschen aber das ist alles nicht wirklich dasselbe
vieleicht könntest du das nochmal bisschen erläutern?
ich schau mir nun erstmal die anderen vorschläge an
€ bei den VFS bin ich mir noch nicht ganz klar was das sein soll XD
Das issen Lazarus Projekt, dementsprechend kannst du nur das komplette Projekt mit Lazarus Kompilieren.
Um nur den Container zu nutzen, musst du lediglich die TFPHashList austauschen. Ich habe ne Unit angehängt mit ner eigenen Hashtable, die auf der Hashtable von BeRo´s Besen Projekt basiert.
Übrigens ne gute erweiterung für die Container Klasse wäre das die TStream implementierung bei TContainerEntry.GetData() der beim lesen öffnet wird, nicht erst komplett den Inhalt der Daten in den Speicher pumpt (MemoryStream), sondern ein FileStream mit entsprechender Seek/Read implementierung der auf die jeweilige Container Datei zeigt. Wäre wichtig wenn man z.b. eine 2 GB großes video file zu nutzen, z.b. in ner render to texture implementierung. Nur so ne idee.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.