Qt Resource und fopen/fstream
Qt Resource und fopen/fstream
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
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
Was passiert denn genau?
Eventuelle Meldungen?
Womit wurde die Textdatei erstellt?
Eventuelle Meldungen?
Womit wurde die Textdatei erstellt?
Re: Qt Resource und fopen/fstream
fopen gibt 0 zurück.
Das mit der Textdatei war nur eine Variante, es funktioniert auch mit anderen files nicht.
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
poste mal den Code bitte.
Re: Qt Resource und fopen/fstream
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
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Qt Resource und fopen/fstream
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
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
Re: Qt Resource und fopen/fstream
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 ...
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 ...
Re: Qt Resource und fopen/fstream
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.
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.
Re: Qt Resource und fopen/fstream
Das ist immer eine gute Entschuldigung für aussergewöhnliche Lösungen
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 ...
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 ...
Re: Qt Resource und fopen/fstream
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.