Wie in Dateicontainer schreiben?



  • Keksschleuder schrieb:

    Es weiß ja sicherlich jeder was eine zip oder eine rar Datei ist. Es gibt aber auch Software die ihre eigenen Container benutzt, wo dann alle möglichen Dateien drinn abgelegt werden.
    Meine Frage lautet, wie erstellt man so einen Container (ohne Kompression)? Geht das überhaupt mit Standard C++ oder ist das Betriebssystem abhängig?

    Öh.

    Dir ist hoffentlich klar dass ein Archiv mit einem "eigenen Format" einfach nur eine Datei ist, in die die Inhalte anderer Dateien reingeschrieben wurden. Halt irgendwie mit Inhaltsverzeichnis, damit das Archivprogramm auch weiss wie die Dateien alle heissen, wo sie anfangen etc.

    Und wenn man das voraussetzt ist mMn. auch klar, dass das natürlich mit C++ umsetzbar ist. Wobei man vermutlich bei einigen Dingen plattformspezifische APIs wird verwenden müssen. z.B. kannst du mit ausschliesslich Standard C++ Funktionen nichtmal ein Verzeichnis enumerieren. Wenn du das für dein Archivprogramm brauchst (z.B. weil es Verzeichnisse mitsamt allen Dateien/Unterverzeichnissen aufnehmen können soll) -> plattformspezifische APIs.

    Der "eigentlich" Archiv-Code kann aber vermutlich 100% plattformunabhängig gehalten werden.



  • hustbaer schrieb:

    Wenn du das für dein Archivprogramm brauchst (z.B. weil es Verzeichnisse mitsamt allen Dateien/Unterverzeichnissen aufnehmen können soll) -> plattformspezifische APIs.

    Ginge das nicht theoretisch mit Boost.Filesystem?


  • Mod

    Sone schrieb:

    hustbaer schrieb:

    Wenn du das für dein Archivprogramm brauchst (z.B. weil es Verzeichnisse mitsamt allen Dateien/Unterverzeichnissen aufnehmen können soll) -> plattformspezifische APIs.

    Ginge das nicht theoretisch mit Boost.Filesystem?

    Und Boost.Filesystem funktioniert mit Magie?



  • Du legst die Dateien + Metadaten in eine Datei (Endung relativ egal).



  • Sone schrieb:

    hustbaer schrieb:

    Wenn du das für dein Archivprogramm brauchst (z.B. weil es Verzeichnisse mitsamt allen Dateien/Unterverzeichnissen aufnehmen können soll) -> plattformspezifische APIs.

    Ginge das nicht theoretisch mit Boost.Filesystem?

    Ja, Boost.Filesystem kann das. Und auch viele andere Libs (Qt, POCO, ...).

    Wenn du den Satz der davor steht auch gelesen hast, sollte dir aber klar sein wie es gemeint war: man braucht plattformspezifischen Code um das zu erreichen, ODER eben Libraries die wiederum plattformspezifischen Code enthalten.
    Die C++ Standard Library bietet auf jeden Fall nichts an mit dem man es machen könnte.



  • hustbaer schrieb:

    man braucht plattformspezifischen Code um das zu erreichen, ODER eben Libraries die wiederum plattformspezifischen Code enthalten.

    💡 🙂
    Dachte, du meinst, man muss selbst plattformspezifischen Code fabrizieren.



  • Sone schrieb:

    hustbaer schrieb:

    man braucht plattformspezifischen Code um das zu erreichen, ODER eben Libraries die wiederum plattformspezifischen Code enthalten.

    💡 🙂
    Dachte, du meinst, man muss selbst plattformspezifischen Code fabrizieren.

    Naja ... er ... nö. So war es nicht gemeint. So eine Behauptung wäre auch reichlich doof bzw. gewagt.
    Ich kann ja nicht alle Libraries kennen die es irgendwo gibt die irgendwas machen und auf mehr als einer Plattform lauffähig sind.

    Allerdings gibt es vermutlich auch keine Library die für sämtliche Plattformen verfügbar ist, wo auch eine halbwegs vollständige und standardkonforme C++ Implementierung verfügbar ist.

    D.h. es wird Fälle geben, wo man mit Boost.Filesystem nicht weiter kommt, und auch mit Qt/POCO/... nicht. Die Standard C++ Library hätte man in diesen Fällen trotzdem, nur wie gesagt: die "kann" eben keine Verzeichnisse.



  • Na gut, ich versuche es einfacher auszudrücken. Im Grunde will ich nur mehrere Dateien in eine Datei zusammen fassen und auf diese natürlich auch zugreifen können. Keine kompriemierung, kein Passwortschutz, gar nichts.

    Einfach nur z.B. text1.txt und text2.txt in container.con

    Und dem Programm will ich dann "nur noch" sagen müssen öffne text2.txt in container.con

    Wäre sowas mit Boost möglich?

    €: Achja, es müsste unter Windows funktionieren.



  • Genau das hat man dir doch schon auf Seite 1 vorgekaut?!



  • Keksschleuder schrieb:

    Na gut, ich versuche es einfacher auszudrücken. Im Grunde will ich nur (...)

    Ja. OK. Was hält dich davon ab? Was ist deine Frage?


Anmelden zum Antworten