Archiv-Bibliothek gesucht
-
Kennt jemand eine simple Bibliothek für C oder C++, die Dateien archivieren kann? Wichtig sind mir:
- Läuft auf Windows (besser wäre plattformunabhängig)
- Schöne und gut dokumentierte High-Level-API, also das Gegenteil zum LZMA SDK
- Möglichkeit zur Verschlüsselung mit einem Passwort/Key
- Schnelles Laden einzelner Dateien im Archiv, ohne ganzes Archiv in den Speicher zu laden
- Freie Lizenz (nicht GPL oder so)
Kompression ist nicht nötig. Ideal wäre sowas wie PhysicsFS, leider bietet es keine Verschlüsselung an. Von mir aus muss es sich nicht um ein bekanntes Format wie 7z oder zip handeln.
Notfalls schreibe ich mir was Einfaches selbst, aber ich dachte, wahrscheinlich gibts sowas schon.
-
Der Kleine schrieb:
[*]Freie Lizenz (nicht GPL oder so)[/list]
Das könnte schwierig werden.
Allgemein: Du suchst eine eierlegende Wollmilchsau. Du wärst vermutlich besser geholfen, wenn du dir die bekannten guten Bibliotheken zum Komprimieren, Verschlüsseln und zum Handhaben von Archiven besorgst.
-
SeppJ schrieb:
Das könnte schwierig werden.
Es gibt z.B. viele Bibliotheken mit zlib/libpng-Lizenz, gerade abseits vom linux-spezifischen Bereich. Auch LGPL wäre knapp akzeptabel, auch wenn ich statisches Linken bevorzuge.
SeppJ schrieb:
Du wärst vermutlich besser geholfen, wenn du dir die bekannten guten Bibliotheken zum Komprimieren, Verschlüsseln und zum Handhaben von Archiven besorgst.
Ich habe mich z.B. recht lange mit der C++-Schnittstelle von 7z (LZMA SDK) auseinandergesetzt und würde sie wirklich gerne verwenden. Aber sie scheint keine abstrahierte Funktionalität anzubieten, ständig muss man sich mit irgendwelchem Low-Level-Kram herumschlagen. Es kann nicht sein, dass ich mich um Allokatoren, CRC oder Block-Indizes kümmern muss, nur um ein Archiv zu extrahieren. Dazu kommt, dass das Ganze miserabel dokumentiert ist und kaum brauchbare Beispiele vorhanden sind (das Hello-World-Beispiel für C hat 500 Zeilen).
-
Vorgeschlagener Workflow:
Schreib deine Dateien, z.B. mit zlib. Gibt auch ein C++-Interface, wo du ganz komfortabel in Dateistreams schreibst, die dann gepackt werden. Oder du lässt diesen Schritt weg, wenn dir die Komprimierung nicht wichtig ist.Dann verschlüsselst du deine Dateien, z.B. mit OpenSSL oder CryptoPP. Auch hier gibt es C++-Wrapper (bzw. CryptoPP ist schon für C++). Falls du komprimierst, ist wichtig, dass du dies zuerst tust, verschlüsselte Daten kann man nicht mehr komprimieren.
Dann packst du deine Daten in ein tar-Archiv mit libtar oder libarchive. Kenne leider keine C++-Wrapper dazu, aber findet man eventuell auch oder schreibt man sich zur Not selber. Da du das tar-Archiv aus den verschlüsselten Dateien erstellst und nicht umgekehrt ein tar-Archiv verschlüsselst, kannst du einzeln auf die Dateien zugreifen, ohne das ganze Archiv anpacken zu müssen.
Das sollte sogar größtenteils lizenzrechtlich deinen Bedürfnissen entsprechen.