Qt Resource und fopen/fstream

Alles rund um die Programmierung mit Qt
Antworten
plip
Beiträge: 42
Registriert: 30. September 2008 16:37

Qt Resource und fopen/fstream

Beitrag von plip »

Hallo,

ich habe per Resource-File eine Textdatei zu meinem Projekt hinzugefügt. Diese Datei kann ich mit QFile problemlos öffnen. Wenn ich aber versuche diese per fopen() oder ifstream zu öffnen, schlägt dies fehl. Kann mir jemand erklärenwarum das so ist und ob ich das irgendwie umgehen kann? Die Datei wird in einem Code-Teil gelesen, der Qt-unabhängig bleiben soll...

Gruß
Philip
anti-freak
Beiträge: 18
Registriert: 21. Juli 2012 22:54

Re: Qt Resource und fopen/fstream

Beitrag von anti-freak »

Was passiert denn genau?
Eventuelle Meldungen?
Womit wurde die Textdatei erstellt?
plip
Beiträge: 42
Registriert: 30. September 2008 16:37

Re: Qt Resource und fopen/fstream

Beitrag von plip »

fopen gibt 0 zurück.
Das mit der Textdatei war nur eine Variante, es funktioniert auch mit anderen files nicht.
anti-freak
Beiträge: 18
Registriert: 21. Juli 2012 22:54

Re: Qt Resource und fopen/fstream

Beitrag von anti-freak »

poste mal den Code bitte.
plip
Beiträge: 42
Registriert: 30. September 2008 16:37

Re: Qt Resource und fopen/fstream

Beitrag von plip »

Code: Alles auswählen

QFile sfl(":/data/sfl_ep4ce6.svf");
 if(!sfl.exists())
   cout << "Exists\n";
FILE* f = fopen(":/data/sfl_ep4ce6.svf", "r");
if(f==NULL)
   cout << "NULL\n";
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Qt Resource und fopen/fstream

Beitrag von Christian81 »

Das kann auch nicht funktionieren da der System-Aufruf mit Qt-Resourcen natürlich nichts anfangen kann. Das geht nicht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
plip
Beiträge: 42
Registriert: 30. September 2008 16:37

Re: Qt Resource und fopen/fstream

Beitrag von plip »

Hi Christion,

danke für die hilfreiche Antwort. Ich muss gestehen, dass ich das Resourcen-System bisher nur benutzt habe, ohne mich damit zu beschäftigen wie es funktioniert. Ich denke ich werde das jetzt so lösen, dass ich die Datei zur Laufzeit mit einem QFile öffne und in eine temporäre Datei kopiere, die ich dann an fopen() übergebe.

Gruß
Philip
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Qt Resource und fopen/fstream

Beitrag von RHBaum »

Generell stellt sich dann die frage, warum die "ressource" (sfl_ep4ce6.svf) im code teil des Progs untergebracht (als statische ressource, in die exe eincompiliert) wird ?
Daten aus dem codesegment auszulesen temporaer zu speichern um sie dann per fopen zu oeffnen klingt irgendwie nach "von hinten durch die Brust ins Auge".

Viele programme bringen dateien ausserhalb des code segments mit, die zur laufzeit dynamisch geladen werden.
Soll sie nicht bearbeitet werden, ist also ne quasi statische ressource die nur dynamisch geladen wird, gehoert die eigentlich ins programmverzeichniss, also neben die exe oder in unterverzeichnisse ...
für alle qt unterstuetzte systeme bietet qt natuerlich methoden an, wie "sicher" das Programmverzeichniss ermitteln kannst (schau dir QApplication an).

Von der anderen Seite betrachtet:
warum brauchst du noch fopen ?
du programmierst c++, schiesst aber mit fopen auf dateien ?
Oder welche library will von dir nen FILE zeiger ???

Ciao ...
plip
Beiträge: 42
Registriert: 30. September 2008 16:37

Re: Qt Resource und fopen/fstream

Beitrag von plip »

Es handelt sich dabei um vorhanden C-Code, der für sich genommen aus der Kommandozeile läuft und (wenn es jemand wünscht) auch weiter laufen soll.
Um diesen Code habe ich eine Qt-Schale gebaut, in der Form, dass das Ganze zu einer übergeordneten Applikation als Plugin geladen werden kann. Das ist auch der Grund, warum ich die Datei gerne als Resource hätte. So muss ich dem Anwender nur eine einzelne .dll geben, die alle benötigten Resourcen mitbringt.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Qt Resource und fopen/fstream

Beitrag von RHBaum »

Das ist immer eine gute Entschuldigung für aussergewöhnliche Lösungen :mrgreen:

Aber wenn du die "Schale" in der hand haettest, koenntest auch Plugins unterstuetzen, die mit mehr dateien kommen als nur die dll/so ...
iss aber bissi mehr Aufwand und hat auch Nachteile.

Und dein geerbter Code besteht also auf eine per fopen ansprechbare ressource ?
Du willst auch nicht tiefer eingreifen um statt fopen/FILE Ihm was anderes unterzujubeln, wo er mit read ähnlich drauf zugreifen koennt ?
Das waer noch das einzigste, ansonsten bleibt nur der weg ueber die temporare datei ....

Ciao ...
plip
Beiträge: 42
Registriert: 30. September 2008 16:37

Re: Qt Resource und fopen/fstream

Beitrag von plip »

Ich habs jetzt so gelöst, dass das Plugin beim Laden nachschaut, ob die Datei vorhanden ist. Wenn nicht, wird diese aus den Resouren kopiert. Damit sollte der Kopiervorgang dann nur beim erstmaligen Laden eines Plugins stattfinden.
Antworten