Text-Datei als Ressource einbinden



  • Hallo alle zusammen,

    ich programmiere ein kleines Konsolenprogramm unter mit Eclipse und MinGW. Aus QT kenne ich eine Funktion, mit der ich Textdateien als Ressource einbinden kann. So werden die Bestandteil meiner exe, ich kann aber darauf zugreifen, wie auf eine externe Textdatei (ifstream, etc.). Gibt es diese Funktion auf in Standard C++? Und hat das Eclipse CDT vielleicht einen Assistenten, der einem den Zusammenbau erleichtert (auch wenn zweiteres keine Frage direkt zu C++ ist)?

    Gruß, Heimchen



  • heimchen schrieb:

    Gibt es diese Funktion auf in Standard C++?

    Nein. C++ ist eine Sprache. "Exe" und "Ressource" sind nichts, was irgendetwas mit C++ zu tun hätte.



  • heimchen schrieb:

    Aus QT kenne ich eine Funktion, mit der ich Textdateien als Ressource einbinden kann. So werden die Bestandteil meiner exe, ...

    Wenn eine Funktion die Textdatei erst während der Programmausführung lädt, dann ist sie kein Bestandteil der Anwendung, sondern wird dynamisch in den Speicher kopiert.
    Auf diesem Wege könntest du sie in dein Programm einbetten.
    Falls du in Wahrheit die Textdatei zum Programmstart in den Speicher bekommen möchtest, kannst du sie einfach komplett in einen String laden und über stringstream behandeln.



  • Vielleicht hätte ich ein paar QT-Schnipsel dazu tun sollen (ich weiß, QT ist keine Sprache). Ich hab dort ein .qrc-File mit folgendem Inhalt:

    <RCC>
        <qresource prefix="/">
            <file alias="myRes.c">Ressources/myRes.c</file>
        </qresource>
    </RCC>
    

    Und mache dann in meinem Code folgendes:

    QResource::registerResource("/myRes.c");
    QFile fileTemplate(":/myRes.c");
    QTextStream streamTemplate(&fileTemplate);
    
    if (!fileTemplate.open(QIODevice::ReadOnly)) { return false; }
    

    Und suchen tu ich nach einem "Standard"-C++ Ersatz für QRessource und wie man ihn verwendet. myRes.c soll in mein Programm fest eingebunden werden und nicht neben der Exe im Programmverzeichnis liegen.



  • Und suchen tu ich nach einem "Standard"-C++ Ersatz für QRessource und wie man ihn verwendet. myRes.c soll in mein Programm fest eingebunden werden und nicht neben der Exe im Programmverzeichnis liegen.

    Das gibt es nicht. Die Funktionen um das zu realisieren sind plattform- und ev. compiler abhängig.



  • Schade.
    Bisher hatte ich immer das Gefühl, QT ersetzt/erweitert lediglich "Standard-Techniken" wie std::string, aber erfindet das Rad nicht wirklich neu. Hatte gehofft, dass wäre bei QRessource nicht anders...



  • Captain Obvious schrieb:

    Nein. C++ ist eine Sprache. "Exe" und "Ressource" sind nichts, was irgendetwas mit C++ zu tun hätte.

    Schlechte Argumentation.

    "Nein. C++ ist eine Sprache. "Thread" und "Zeit" ist nichts, was irgendwas mit C++ zu tun hätte."

    C++ besitzt auch eine Standardbibliothek, die durchaus plattformabhängige Funktionen abstrahiert. Sie ist zwar vergleichsweise klein, aber das Fehlen gewisser Funktionalität ist deswegen noch lange nicht offensichtlich.



  • Dann vielleicht eine andere herangehensweise:
    Ich kompiliere mit MinGW. Gibt es dort vielleicht eine Möglichkeit, z.B. über den Linker, Textdateien irgendwie in das Binary einzubetten?

    Hintergrund der ganzen Geschichte ist, dass ich in der Textdatei Platzhalte eingebe, die dann durch mein Programm gefüllt werden. Wenn ich an der Textdatei irgendetwas ändern möchte, was nicht den Inhalt der Platzhalter betrifft, bräuchte ich so nur die Vorlage anpassen, kompilieren, fertig. Jetzt habe ich jede Zeile, die ich ausgebe, in C++ hart kodiert - mit entsprechendem Aufwand (Maskierungen, etc.). Das fertige Programm darf aber nur aus einer einzelnen Exe bestehen, sonst würd ich ja meine Templates einfach mit in den Ordner packen...


Anmelden zum Antworten