fstream/ostream - Datei öffnen, wo wird überall nachgeguckt?



  • Hi!
    Gibt es eine definierte Reihenfolge, in der beim Öffnen die Verzeichnisse durchgesehen werden?
    Z.B.
    1.) Aktuelles Arbeitsverzeichnis.
    2.) Verzeichnis der ausführenden Datei.
    oder andersrum 😕
    usw.

    Danke,
    MfG.



  • Hallo,

    wenn vor dem Anwendungsstart oder während des Programmlaufs nicht explizit eine Änderung des "aktuellen" Verzeichnis passiert ist, dann ist und bleibt das Verzeichnis, aus dem die Anwendung gestartet wurde, auch das aktuelle Verzeichnis. Alle relativen Dateinamen werden dann mit Hilfe dieses Verzeichnisses "gefunden". Nur eine solche Änderung kann also bewirken, dass überhaupt in einem anderen Verzeichnis als dem "Anwendungsverzeichnis" nach Dateien "gesucht" wird. (Natürlich ist eine Änderung z.B. in Windows auch "versteckt" möglich, wenn man z.B. bei Verknüpfungen in den Eigenschaften das Feld "Ausführen in" manipuliert.)

    MfG,

    Probe-Nutzer



  • Das scheint mir sinnvoll. Was mich durcheinander bringt ist, wenn ich beim Testen in der Programmiephase ein cout << getcwd(NULL,0); mache, wird ein anderer Pfad angezeigt, als wo die exe drin ist( MS VC++ 2008 ).



  • Es gibt ja noch mehr Möglichkeiten, das Ausführungsverzeichnis zu ermitteln. Vielleicht solltest du die mal prüfen.



  • ⚠ Und beim Dateierstellen wird die Datei im Homeverzeichnis erzeugt, nicht wo die exe ist. ⚠



  • open n00b schrieb:

    Das scheint mir sinnvoll. Was mich durcheinander bringt ist, wenn ich beim Testen in der Programmiephase ein cout << getcwd(NULL,0); mache, wird ein anderer Pfad angezeigt, als wo die exe drin ist( MS VC++ 2008 ).

    open n00b schrieb:

    Und beim Dateierstellen wird die Datei im Homeverzeichnis erzeugt, nicht wo die exe ist

    Es gibt, wie schon angedeutet, noch mehrere Möglichkeiten, wodurch ein aktuelles Verzeichnis "versteckt" gesetzt/geändert werden kann. Auch in MS VC++ 2008 kann man bei den Projekt-Optionen ein Verzeichnis setzen, deshalb kann das in der "Programmierphase" ganz anders sein als beim "normalen Programmstart" ausserhalb der Entwicklungsumgebung.

    MfG,

    Probe-Nutzer



  • durchaus möglich. Dann solltest du mal den ersten Parameter ( bei Console: argc[0] ) prüfen und schauen was da drin steht. Da sollte nämlich die Executable komplett mit Verzeichnis übergeben werden.



  • Laut diverser Quellen im Internet, kann argv[0] auch ein relativer Pfad sein.
    Um sicher zu gehen, gibts für Windows GetModuleFileName und für Linux kann man readlink nehmen.

    Gruß,
    o.n.


Anmelden zum Antworten