Pak-Dateien



  • Dr. C++ schrieb:

    Hi!

    Ich wollte mal wissen ob es irgendeinen Weg gibt, aus selbst erstellten Pak-Dateien direkt Dateien aufzurufen.

    Ich verstehe das so, dass du deine eigene .pak-Dateien ins Windowsdateisystem integrieren willst, so dass du mit den stdlib-Funktionen auf die Dateien zugreifen kannst? Ich glaube nicht dass das geht, denn sonst gaebe es schon laengst gescheite ReiserFS/ext-Treiber fuer Windows.

    Edit: Koennte doch gehen, du muesstest wohl die fopen/fclose/fread/..-Funktionen an die eigene Library linken - unter Unix geht das jedenfalls..

    Oder deine Engine bietet von Haus aus an, Benutzerspezifizierte Dateizugriffsfunktionen zu verwenden.



  • Wenn Du einfach nur ein PK3-System wie Quake haben willst -> hatten wir letzte Woche erst.
    U.U. müsstest Du bis auf Seite 2 des Spiele-Forums umblättern.



  • Ich meinte das eher so dass ich die Datei genauso mit einem Windows-Befehl öffnen könnte.

    Bsp: CreateFile( "C:\\test.pak//test.bmp", ... );

    Und das mit der DLL hab ich so gemeint, dass ich die irgenwie in der Registry registriere und Windows dann die DLL zum öffnen der Pak-Datei aufruft.



  • du meinst, wie man zB. bei winxp ein zip auch als ordner öffnen kann?
    Ich denke das wird nur von explorernahen anwendungen so interpretiert. du wirst es (denk ich zumindest) nicht so hinbekommen, dass zB. das fopen() automatisch auf daten innerhalb eines packs zugreift



  • Mir erschließt sich der Sinn des ganzen... 😕

    Du müsstest dafür 'nen API-Hook auf FindFirstFile/FindNextFile und so setzen.



  • Mir geht es ja nicht darum, dass man die Dateien in der Pak finden kann.

    Also: Wenn man z.B. bei der Explorer-Adress-Leiste C:\test.zip/test.txt eingibt öffnet dieser test.txt aus test.zip.

    Dabei verwendet der doch irgendeine DLL im Windows-Ordner, die die Zip-Datei ließt und die Daten, die gelesen wurden, an Windows zurück schickt. Windows speichert dann die txt-File in einem temporären Ordner, von wo aus sie geöffnet wird.

    Dabei muss Windows die Datei aber nur temporär speichern, weil sie komprimiert ist(mein Format sollte unkomprimiert sein). Ich will fast nichts anderes, als die Zip-DLL für mein eingenes Format neu zu schreiben und dass die Daten dann von der DLL an Windows geschickt werden und Windows diese dann an mein Spiel schickt.

    Ein Tutorial dafür oder ein Freeware-System der Art, das es schon gibt wäre aber auch nicht schlecht.



  • Dr. C++ schrieb:

    Ich will fast nichts anderes, als die Zip-DLL für mein eingenes Format neu zu schreiben und dass die Daten dann von der DLL an Windows geschickt werden und Windows diese dann an mein Spiel schickt.

    Jo, aber warum so ein Aufwand?
    Warum kümmert sich Dein Spiel nicht selbst darum und Du willst da irgendwas fieses in den Windows Explorer integrieren?!? 😕
    Wo ist da der Sinn?

    Kannst ja mal im Windows-Verzeichnis nach zipfldr.dll suchen und die in Dependency Walker anschauen.
    Höchstwahrscheinlich ist das aber ein COM-Interface (und wahrscheinlich undokumentiert) -> also: Viel Spaß! :p 😋 🤡



  • Ich will da ja nichts im Windows Explorer intigrieren! Bloß ich würde mal gerne wissen, wie es manche Spiele schaffen Musik-Dateien aus solchen Paks zu holen und die direkt z.B. mit dem MM-System abzuspielen ohne sie zu extrahieren.



  • Das tun die Spiele aber, sie öffnen das Archiv suchen die gesuchte Datei innerhalb des Archivs (wenn komprimiert, muss man natürlich dekomprimieren), lesen sie entweder ganz oder teilweise ein (in den Speicher) und spielen sie dann ab.

    Kenne mich mit der MM-Bibliothek nicht aus, aber ich wette, dass die auch Funktionen zum Abspielen hat die nen Zeiger auf nen Puffer übernehmen.



  • Dr. C++ schrieb:

    Ich will da ja nichts im Windows Explorer intigrieren! Bloß ich würde mal gerne wissen, wie es manche Spiele schaffen Musik-Dateien aus solchen Paks zu holen und die direkt z.B. mit dem MM-System abzuspielen ohne sie zu extrahieren.

    OMG... 🙄

    Oh Mann... Vielleicht liest Du dann meinen ersten Post nochmal... 🙄

    Alles umsonst... 😡 🙄


Anmelden zum Antworten