Mehrere Dateien zu einer zusammenfassen

  • Mehrere Dateien zu einer zusammenfassen

    Hi!

    Ich programmiere gerade ein Spiel und verwende dafür externe Ressourcen, um das Laden zu beschleunigen.
    Da ich nicht möchte, dass die Dateien von den Usern gesehen bzw. verändert werden können, möchte ich alle Dateien zu einer großen Datei zusammenfassen (so wie ein ZIP-Archiv, nur ohne komprimierung).

    Ist es möglich soetwas ohne DLL oder EXE zu machen?

    Ich habe es schon mit Binären Dateioperationen versucht, indem ich die Dateien hintereinander in eine Datei geschrieben habe, und dazwischen Trennzeichen verwendet habe, doch es hat nicht bei allen Bildern funktioniert (weil das Trennzeichen im Bild vorkam, und er es deshalb falsch ausgelesen hat).

    Hat jemand eine Idee?

    Mein PC: WinXP Pro | 3 GHz x 2 | 1024 MB RAM | Intel Grafikchip, 224MB
  • statt nur ein trennzeichen zu verwenden, fge hinter das trennzeichen noch die größe der einzelDatei an und suche dann erst nach dieser bitanzahl wieder nach dem trennzeichen.

    edit: eine andere möglichkeit wäre es auch eine art inhaltsverzeichnis für die datei zu erstellen.
    www.glowingorb.de
    „Wenn es im Universum noch irgendwo intelligente Lebewesen gibt, dann kennen sie vielleicht Schach, höchstwahrscheinlich jedoch GO

    (Schachweltmeister Emanuel Lasker)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Glowing Orb ()

  • Das hab ich schon versucht, habs aber nicht geschafft :(
    Könntest du mir vielleicht ein Script machen?

    edit: Die Idee mit dem Inhaltverzeichnis hatte ich auch schon, aber vielleicht gibt es ja noch eine elegantere Möglichkeit

    Mein PC: WinXP Pro | 3 GHz x 2 | 1024 MB RAM | Intel Grafikchip, 224MB

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mikesoft ()

  • Nur sone Frage was spricht den gegen die 7zip Packung?
    1. Die Datein werden gepackt -> kleineres Paket
    2. Du kannst es mit Passwort verschlüsseln
    Face in the wind, we're riding the storm
    We'll stay our course whatever will come
    ~~ Stay (Running) Wild ~~
  • ich hätte da noch eine andere idee... wenn du einfach immer nur das erste byte des bilder, sounds, etc. veränderst kann es nicht mehr gelsen werden.... und nur du weisst wie es geändert wurde :)
    hier der code zum ändern:

    GML-Quellcode

    1. {
    2. var fid, i;
    3. fid=file_bin_open(filename,2)
    4. file_bin_seek(fid,0)
    5. i=file_bin_read_byte(fid)
    6. file_bin_seek(fid,0)
    7. file_bin_write_byte(fid,i+1)
    8. file_bin_close(fid)
    9. }

    anstatt i+1 kannst du auch i+5 nehmen..... du solltest es einfach immer vorher testen, da sonst fehler auftreten könnten (wenn z.B. die limite überschritten wird, i+9999 ist wahrscheinlich zu viel)
    zum zurückändern der datei führst du das gleiche script aber diesmal mit i-1 (oder was auch immer du verwendest) aus.

    Xmas-Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Ich bemerke gerade:
    Fragen zum Thema geschützte externe Dareien mit 7zip kommen immer wieder


    Wäre es möglich das man sich wieder zusammen tut und ein kleine Übersetzungsaktion startet von z:B. dem Thread:easy loading with 7zip thread

    und es dann in unsere Hilfesammlung mit aufnimmt ?

    Ich glaube vielen von uns wäre damit sehr geholfen da man ja merkt das Fragen zu dem Thema immer wieder kommen.

    Und meist werden die Fragen gestellt weil man mit den Englischen Dokus nicht klarkommt.(weil man z.B. Englisch nicht so gut beherrscht)

    sollte bereits eine Deutsche Dokumentation zu 7zip existieren so möge man mir auf die Finger hauen und meinen Post löschen.
    Ich hatte jedenfalls keine ausführliche gefunden.

    euer Guld
  • @Dragoon: Die idee is nicht schlecht, funktioniert nur leider nicht, wenn ich textdateien habe. Aber vielleicht werde ich diese Methode verwenden (eben nur bei Sounds und Bildern)

    @Defmaster: Ich habe nichts gegen 7zip Archive oder ähnliches. Ich möchte nur keine externen Dateien verwenden (DLL und EXE). Vielleicht ist es möglich, den 7zip Algorithmus in GML zu programmieren, aber das habe ich noch nirgends gesehen.

    @Guld: Ich habe mir die englische Dokumentation durchgelesen und hatte keine Probleme sie zu verstehen. Ich habe ja nicht nach einer 7zip komprimierung gefragt (das hab ich nämlich schon). Es muss nicht komprimiert sein, es sollen nur nicht so viele einzelne Dateien sein.

    Mein PC: WinXP Pro | 3 GHz x 2 | 1024 MB RAM | Intel Grafikchip, 224MB

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mikesoft ()

  • Original von Mikesoft
    Vielleicht ist es möglich, den 7zip Algorithmus in GML zu programmieren, aber das habe ich noch nirgends gesehen.


    Das kann ich gleich sagen, das es unmöglich ist. GML hat dafür zu wenige Datentypen und Befehle mit denen das gemacht werden muss.

    Aber das mit dem Dateien zusammenfassen wäre denkbar... Man baut sich ne Datei auf, ähnlich einer Tar Datei, also mit Header und Inhalt. D.h. am Anfang ist immer 256 Zeichen Platz für den Originalen Dateinamen, dann kommen, k.a., 256 Zeichen für die Dateigröße in Byte, und dann die Datei selber. Danach kommt dasselbe wieder für ne andere Datei.
    So kann man das sequenziell einigermaßen lesen, und man kann innerhalb des Archivs navigieren. Ob das mit einigermaßen annehmbarer Geschwindigkeit geht kann ich noch nicht sagen, aber da mach ich mal ein paar Versuche wenn es dir so am Herzen liegt ;)

    Edit: So, hab mal quick&dirty was zusammengehackt was einigermaßen gehen sollte. Schau dir einfach die Objekte an, was die machen, da werden einfach die Skripte geladen die ne Archive.bin machen und das da reinhauen, und beim anderen ein gesuchtes entpacken.
    Beachte aber folgende Einschränkungen:
    -Du darfst nie in einem Rutsch vom Archiv lesen und schreiben, vorher immer schließen und neu öffnen.
    -Dateien können nur in der Reihenfolge extrahiert werden, in der sie zusammengesetzt wurden.
    -Nicht für große Dateien zu empfehlen, die Game Maker Binärroutinen arbeiten recht gemächlich.
    Dateien
    • Bin.zip

      (52,7 kB, 121 mal heruntergeladen, zuletzt: )
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Windapple ()

  • Danke Windapple!!

    Das ist genau das, was ich gesucht habe. Funktioniert perfekt!
    Ich werds mal mit größeren Dateien versuchen, und wenn die Geschwindigkeit akzeptabel ist, werd ichs in meinem Spiel verwenden.

    Das Problem ist also gelöst
    Danke an alle für eure Hilfe!

    Mein PC: WinXP Pro | 3 GHz x 2 | 1024 MB RAM | Intel Grafikchip, 224MB