Arbeitsverzeichnis festlegen



  • Hallo, ich habe folgendes Problem:
    Ich will ein paar Grundeinstellungen für mein Programm in einer Textdatei separat abspeichern und bei jedem neuen Dokument frisch laden. Die Textdatei befindet sich im Verzeichnis der ausführenden EXE-Datei.
    Die anderen Programmdaten werden durch die Serialisierungsfunktion des Anwendungsgerüsts gespeichert und geladen.
    Wenn ich jetzt solch eine Datei durch die Serialisierungsfunktion lade, und die sich in einem anderen Verzeichnis befindet, ändert sich anscheinend das Arbeitsverzeichnis und er findet meine Textdatei nicht mehr weil der relative Pfad nicht stimmt.
    Wer kann mit da eine Lösung vorschlagen? Die Lösung sollte natürlich flexibel sein, d.h. wenn der Anwender die Exe-Datei wo anders (Pfad) ablegt, sollte es auch noch funktionieren.

    Danke für Hilfe, Tom

    void CWeSpDoc::DoEinstellungenLaden()
    {
    try
    {
    char *pFileName = "SystEinst.txt";

    CStdioFile file(pFileName, CFile::modeRead);

    CString strZeile;

    // Daten von Datei übernehmen
    file.ReadString(strZeile);
    m_iaEinstellungen[0] = DoStringToInt(strZeile);

    // Datei schließen
    file.Close();
    }
    // Ausnahmebehandlung
    catch (CFileException *e)
    {
    e->ReportError();
    e->Delete();
    return;
    }
    }



  • Die Einstellungen könntest du in der Registry ablegen. Oder im Windows-Verzeichnis.

    Oder du legst in der Registry den Pfad zur Konfig ab. Oder holst dir den Exe-Pfad mit GetModuleFilname.

    [ Dieser Beitrag wurde am 14.11.2002 um 11:10 Uhr von Nemesyzz editiert. ]



  • Ich wäre für eine Ini-Datei im Programmverzeichnis, dann wird die Registry nicht vollgemüllt bzw. man erspartt sich eien Deinstallationsroutine und ins Windowsverzeichnis würde ich die Ini auch nicht packen. Denn wenn man das Programmverzeichnis löscht kann man sich sicher sein, dass auch alles runter ist.



  • Hallo Luckie,
    das mit der INI-Datei im Programmverzeichnis klingt gut! Kannst Du ´mir ein paar Anhaltspunkte geben wie ich das bewerkstelligen kann?

    Gruss, Tom



  • Also, das mit der Datei kannst du vergessen, ausser du durchsuchst explizit die ganze Festplatte nach der Datei(und das wäre ein zu großer Aufwand). Entweder die Datei darf sich nur in einem bstimmten Verzeichniss befinden, oder du legst die Daten wie schon vorgeschlagen in der Registry ab, was übrigens auch der elegntere Weg ist. Diese Vorgehensweise liegt auch im Sinne der Windowsprogrammierung.



  • Stimmt, ich freue mich auch jedes mal wenn ich nach 2 Monaten noch Reste von Programmen in der Registry finde, die ich schon seit Wochen deinstalliert habe und ich mir sicher war sie seien restlos von der Platte.

    Microsoft empfiehlt zwar die Registry zu benutzen anstatt ini-Dateien, aber dann muß auch so verantwortungsbewußt programmiert werden, dass auch alle Reste wieder entfernt werden. Nur ist das leider in den seltesten Fällen gegeben. Desweiteren ist die Registry nur sinnvoll, wenn man Informationen zentral für mehrere Anwendungen ablegen will. Aber das ist bei den meisten Anwendungen nicht der Fall. Also spricht nichts gegen die Verwendung von ini-Dateien.

    @ragazo: Sorry mit der MFC habe ich noch nicht gearbeitet, da müßte dir jemand anders helfen. Oder du machst es über die WinAPI, das ist auch nicht schwer. Kuck einfach mal im MSDN.


Anmelden zum Antworten