Arbeitsverzeichnis ("Ausführen in") ändert sich



  • Hallo,
    hier ein nerviges Problem, das ich immer wieder habe und bei dem ich mir nicht sicher bin, ob es wirklich Windows-spezifisch ist. Jeder Prozess, den man in Windows startet, hat ja ein Arbeitsverzeichnis, also einen Ort, wo es ausgeführt wird. Ich meine das, was man im Eigenschaftsfenster einer Verknüpfung bei "Ausführen in" angibt.

    Wenn dieses (selbstprogrammierte) Programm nun eine Datei öffnen will, beispielsweise so:

    FILE* f = fopen("einstellungen.txt", "rb");
    

    Dann klappt das wunderbar, sofern die entsprechende Datei in diesem Arbeitsverzeichnis liegt. Soweit so gut.

    ABER: Nehmen wir an, das Programm greift während seiner Laufzeit auf andere Verzeichnisse zu - z.B. könnte es vom Benutzer ausgewählte Dateien öffnen oder andere Prozesse in anderen Arbeitsverzeichnissen starten (mit CreateProcess) - dann ändert sich offfenbar auch das aktuelle Arbeitsverzeichnis.

    Wenn der Prozess also beim Beenden geänderte Einstellungen in der anfangs problemlos geladenen Datei speichern möchte, z.B. so:

    FILE* f = fopen("einstellungen.txt", "wb");
    

    So scheint das im ersten Moment zu funktionieren. Doch wenn man genau hinsieht, landet die Datei mit den neuen Einstellungen ganz woanders (nämlich im zuletzt geöffneten Verzeichnis). Die ursprüngliche "einstellungen.txt" bleibt vollkommen unberührt. Startet man das Programm erneut, hat es alle vorgenommenen Änderungen an den Einstellungen vergessen.

    Meine Frage ist daher also: Was muss ich tun, damit ich immer im "richtigen" Arbeitsverzeichnis lande, wenn ich keinen kompletten Pfad angebe?

    Vielen Dank schonmal fürs Durchlesen & Helfen! 🙂



  • Mr Train schrieb:

    ABER: Nehmen wir an, das Programm greift während seiner Laufzeit auf andere Verzeichnisse zu - z.B. könnte es vom Benutzer ausgewählte Dateien öffnen oder andere Prozesse in anderen Arbeitsverzeichnissen starten (mit CreateProcess) - dann ändert sich offfenbar auch das aktuelle Arbeitsverzeichnis.

    Nö, das "Arbeitsverzeichnis" ändert sich nicht wenn man Files aufmacht oder Prozesse startet. Fieserweise wird es allerdings vom Open-File Dialog geändert.

    Meine Frage ist daher also: Was muss ich tun, damit ich immer im "richtigen" Arbeitsverzeichnis lande, wenn ich keinen kompletten Pfad angebe?

    Man speichert Einstellungen üblicherweise nicht im "Arbeitsverzeichnis", sondern entweder "neben" der .exe (-> GetModuleFileName(0)), im %APPDATA% Verzeichnis (-> ExpandEnvironmentStrings) oder in der Registry.
    Wenn du unbedingt willst kannst du aber das aktuelle Verzeichnis beim Programmstart auslesen und dann (nachdem z.B. der Open-File Dialog es geändert hat) wiederherstellen.
    Oder gleich mit Hilfe des ausgelesenen Verzeichnispfades einen absoluten Pfad basteln, der dann unabhängig vom Current Directory funktioniert.
    http://msdn.microsoft.com/en-us/library/as5kw0ze(v=vs.80).aspx



  • Dieses Forum bricht echt alle Rekorde. Nirgendwo sonst kriegt man so schnell so eine kompetente Antwort. Vielen Dank dafür! Es war tatsächlich der Open-Dialog.


Anmelden zum Antworten