Leider gibt es keine eindeutige Möglichkeit, dies zu tun, da Pfade vom Betriebssystem abhängig sind. Um dies in einer robusten Weise zu erreichen, müssen Sie möglicherweise eine Funktion definieren, die während der Vorverarbeitung nach dem Betriebssystem sucht (vgl. Kompilierungsflags, z. B. here).
Für * nix Systeme (Unix, einschließlich OSX und Linux) die Option, die Sie sollten
../
im Weg genügen vorgesehen geht zum vorherigen Verzeichnis.
Aber in Windows gibt es keine Möglichkeit, dass ich in das obige Verzeichnis gehen kann (ich habe im Moment kein Windows-System mit mir). Sie können diese Einschränkung jedoch mit der API GetModuleFileName function umgehen. (Beachten Sie, dass diese in den Systemen nicht über Arbeit wird)
CHARACTER*(*) pathname ! full name
INTEGER L ! length
L= GetModuleFileName(NULL,pathname,LEN(pathname))
Vollständiger Name wird nun den vollständigen Pfad enthalten, wo Sie Ihr Programm ausführen, so dass Sie alle Arten von String-Operation tun können, die Sie wollen. Wenn Sie über eine Ebene gehen wollen
Idx = index(trim(pathname), '/', .True.)
Sucht den Index der letzten Zeichen ‚/‘ im Pfadnamen (möglicherweise vor dem letzten für die man suchen müssen).
outfile_path=pathname(:idx)+'/inf/input.dat'
wird jetzt der Pfad, den Sie möchten.
Ich aktualisiere die Post! – Peter
Sie können das nicht direkt in Fortran tun. Sie müssen das aktuelle Verzeichnis als String erhalten und die Manipulation selbst vornehmen. Siehe hier https://StackOverflow.com/Q/30279228/1004168 – agentp
Sorry, ich bin etwas unerfahren mit FORTRAN. Wie könnte ich das tun? Soll ich irgendwo eine CD einbauen oder "streng manuell" meinen? – Peter