Mit Qt eine Container Datei erstellen und auslesen

Alles rund um die Programmierung mit Qt
Antworten
ycronoy
Beiträge: 34
Registriert: 19. Oktober 2012 00:58

Mit Qt eine Container Datei erstellen und auslesen

Beitrag von ycronoy »

Hallo liebe Leute da Draußen,

weiß einer/e von euch wie man sowas wie eine Container Datei erstellen kann?
Am besten nur mit qt (5) und ohne weitere externe libs?

Was ich genau meine ist sowas wie truecrypt Container nur unverschlüsselt und unkomprimiert (wenn doch schadet nicht).

Ich möchte das als Projekt Datei nutzten in der alle meine Daten gesichert werden sollen. Man könnte ja mit Sicherheit einfach einen Ordner nehmen, das ist in meinem
fall nicht so gut.

Einer eine Idee? Wenn sowas noch nicht umgesetzt wurde, würde ich mich freuen einen tipp zu bekommen um zu wissen in welche Richtung ich arbeiten muss.

MfG,
ycronoy
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Mit Qt eine Container Datei erstellen und auslesen

Beitrag von RHBaum »

DU willst also dateien in dateien ....

- du kannst dir sowas selber bauen. Dateien sind selber nur datenstroeme, du brauchst halt nur ne verwaltung, das mehrere Bloecke in einem grossen block kannst.
- Du kannst nen vorhandenes format hernehmen, pkware container z.b. (.zip) die unterstützen auch unerverschluesselte,unkomprimierte Bloecke
- du kannst nen "SQL" format (sqlite z.b.) dafuer missbrauchen, und alle dateien als Blobs reinhaengen
- es gibt auch virtuelle dateisysteme, aber denk das ist fuer deinen fall etwas zu komplex ....

Was nu genau das richtige ist, da fehlen uns viel zu viele angaben.
Performance ? Dateigroessen ? in welchen kontext soll das prog laufen (user, admin, dienst ... )
....

Ciao ...
ycronoy
Beiträge: 34
Registriert: 19. Oktober 2012 00:58

Re: Mit Qt eine Container Datei erstellen und auslesen

Beitrag von ycronoy »

Hi RHBaum,

Mir ist die Performance schon sehr wichtig, der Zugriff und das auslesen der Informationen sollte in wenigen sec (1 bis max 5 sec) möglich sein. Die Größe der darein wird nicht exorbitant sein, da bewegen wir uns im berech von ca. 1 bis max 5 mb (ehr überwiegend sogar in kb bereich).

Maximal Größe der Container Datei kann auf 100 mb bis einem Gigabyte anwachsen.

Es werden überwiegend nur Text Dateien gesichert und wenige Bilder (dafür sind diese halt etwas größer). Die Anwendung ist im User bereich angesiedelt, die soll nicht von Admin bereich gebraucht werden und als System dienst soll das als recht nicht laufen.

Da ich gerade lerne und versuche zu versteh wie das Programmieren überhaupt funktioniert möchte ich in keine Licensen oder ähnliches investieren. Abgesehen davon wird das ein Open Source Projekt sein an dem sich jeder in Zukunft beteiligen darf.

Die Umsetzung soll möglichst simpel und einfach sein, wie schon gesagt(/geschrieben) ich brauche etwas was einen normalen Ordner ersetz und an stat dessen in eine Datei schreibt.
Ach noch was, dennoch möchte ich ungerne den vorteil eines Ordners verlieren das man in einen Ordner einen weiteren erstellen kann. Also so was wie eine Verschachtelung.

Ich hoffe ich habe dich jetzt nicht erschlagen.

MfG,
ycronoy
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Mit Qt eine Container Datei erstellen und auslesen

Beitrag von RHBaum »

keine sorge, mich erschlaegst ned so schnell :-)

Generell, um nen gefuehl zu bekommen, wie man sowas macht, empfehl ich die pkware specs mal zu lesen ....
http://en.wikipedia.org/wiki/ZIP_%28file_format%29
Da bekommst nen Gefuehl, wie man containerformate bauen kann ....

Der vorteil von "fertigen" formaten waere, das man deine COntainer auch mit anderen tools, z.b. entpackern Filemanagern etc oeffnen koennte.
Wenn absolut frei sein willst, wuerde sich tar anbieten
Willst dich selber mit dem thema nicht so beschaeftigen, solltest dich mit virtuellen filesystem beschaeftigen ...
Auf API Ebene ist vielleicht sowas hilfreich :
http://sourceforge.net/projects/avf/

du kannst aber auch in deinem programm nen Filesystem ausm file mounten, und dann Normal aus deinem prog auf dem virtuallen FS rumschreiben und lesen.
Linux bietet da ne Menge, bei windows kenn ich mich da ned so aus, glaub da LW zu mounten ist schon ned so ohne .... keine ahnung ob da was geht.

SQL wuerd ich ned nehmen, wenn performance ne rolle spielt

Bleibt tortzdem die frage, warum willst du in mehrere files schreiben, um das dann zu vertuschen ?
Warum serialisierst du strukturiert nicht gleich alles in ein file. Generizitaet kostet oftmals, spezieller loesungen sind oft performanter und einfacher.
XML ist ned wirklich performant ... waer aber super strukturiert.

WIe komplex sind deine strukturen ?

sind sie weniger komplex, könntest du alles binaer serialisieren.

Ciao ...
ycronoy
Beiträge: 34
Registriert: 19. Oktober 2012 00:58

Re: Mit Qt eine Container Datei erstellen und auslesen

Beitrag von ycronoy »

Mit dem Risiko das ich mich jetzt total blamiere....

Ich arbeite an einem Prog, das so ähnlich ist wie der "RPG Maker", der große Unterschied ist, dass ich vieles besser machen will und das Tool nicht so extrem einschränkend entwickeln will.
Wenn ich ein nettes RPG machen will, reicht der "RPG Maker" evtl., aber es fehlen einfach zu viele Funktionen und kostet auch noch Geld. Deswegen dachte ich mir, ich schreibe einfach etwas ähnliches und mache das zusätzlich auch noch Open Source.

Jetzt das große Problem in C++/Qt bin ich blutiger Anfänger und muss mich erstmal zurecht finden.... PS: Das Messer steckt noch :mrgreen:
Soviel zur Story :D

Wieso ich ein File-System haben möchte, ist einfach zu verstehen (hoffe ich). Ich will, dass Spiele in einer Datei transportiert werden können und das Unerfahrene nicht an den Dateien rum spielen... :)

Wichtig für mich ist, dass alles, was ich schreibe, systemunabhängig ist; es sollen Windows, Linux und auch MAC OSX unterstütz wird.
Das tar-Dateiformat ist mir nicht unbekannt und klingt fast schon nach der richtigen Lösung. Mein Problem ist leider, dass ich absolut keine Ahnung habe, wie ich auf die Information zugreifen kann und auch nicht, wie ich in eine tar-Datei rein schreibe.
Es würde mich nicht stören, wenn andere Tools auch meine Container lesen und entpacken könnte, es ist sogar erwünscht.

Die sogenannte "Struktur" :D besteht aktuell aus ca 9 Ordner und unzähligen Dateien. Es werden auch nicht viel mehr Ordner dazu kommen. Ich würde sagen, dass die "Struktur" recht simpel ist.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Mit Qt eine Container Datei erstellen und auslesen

Beitrag von RHBaum »

Ohje :-)
bin ich blutiger Anfänger und muss mich erstmal zurecht finden.
Jeder hat mal angefangen ...
"RPG Maker"

Vielleicht täusch ich mich, aber meinst nicht das zum Lernen das Thema zu umfangreich ist ?
Unerfahrene nicht an den Dateien rum spielen
wenn andere Tools auch meine Container lesen und entpacken könnte, es ist sogar erwünscht.
Das beisst sich auch irgendwie oder ?

Generell:
In der Business Welt würde man natuerlich versuchen kosten/nutzen abzuschätzen.

Dazu schreibt man meist seine Anforderungen mit ner Priorisierung auf, dann sucht man eine / mehrere Lösungen, schaetzt den Aufwand ab .... etc.

Bei dir les ich raus:

- einfacher transport von Daten (dateien)
- geringer Schutz vor modification

Als Lösung:
- Filesystem in files / virtuelles Filesystem

Als Projectleiter wuerd ich dich nu fragen :

Zugriffsschutz nur weil Dateien verpackst ?
Ist es wirklich heutzutage nen problem, ne Ordnerstruktur zu kopieren statt ner einzelnen Datei ?

nen virtuelles filesystem ist schon nicht trivial ....
Aufwand: hoch !
Nen FS treiber mitzuliefern, der dir nen VFS vorgaukelt, ist fuer die distribution spaeter auch nicht ohne. Wahrscheinlich brauchst adminrechte und nen setup der dir das einrichtet. Alle Plattformen eh problematisch.

Files in Files, machbar, Aufwand medium.
Nicht zu unterschätzen: EInarbeitungszeit.
Und man verliert den wahlfreien zugriff auf FS Ebene -> bei schlechter Implementierung evtl performance Probleme
einfach ne datei editieren ist nicht mehr, sobald sich die groesse aendert, musst du container auseinandernehmen, um dann wieder neu zusammenbauen.

Das waer es dir wert ?
Deine Punkte kannst IMHO besser lösen mit anderen mitteln.

Wo doch schon leichte Probleme hasst, Specs zu finden (und vielleicht zu lesen) und umzusetzen?
tar ist schon nen eher gut dokumentiertes Format :-)
Da sind viele libs, bzw deren API's viel übler dokumentiert .... und trotzdem muss man sie nutzen ....

Ciao ...
Antworten