Навигация по каталогу в предложении OPEN
Как я могу читать из родительского каталога, используя OPEN
статья? Скажем
OPEN (11,file='../inf/input.dat',form='formatted',status='old')
, который не работает. Я получил:
forrtl: severe (29): file not found, unit 11, file /home/cg/compile/comp/../inf/input.dat
Я хотел бы прочитать из родительского каталога непосредственно перед inf
, Это возможно?
1 ответ
К сожалению, не существует уникального способа сделать это, так как пути зависят от ОС. Для этого вам может понадобиться определить функцию, которая будет искать ОС во время предварительной обработки (см. Флаги компиляции, например, здесь).
Для систем *nix (Unix, включая OSX и Linux) предоставленная вами опция должна подойти
../
в пути идет к предыдущему каталогу.
Однако в Windows я не знаю, как попасть в вышеуказанный каталог (в данный момент у меня нет системы Windows). Однако вы можете обойти это ограничение с помощью функции API GetModuleFileName. (обратите внимание, что это не будет работать в системах выше)
CHARACTER*(*) pathname ! full name
INTEGER L ! length
L= GetModuleFileName(NULL,pathname,LEN(pathname))
Полное имя теперь будет содержать полный путь, по которому вы запускаете вашу программу, так что вы можете выполнять любые операции со строками. Если вы хотите пойти выше одного уровня
Idx = index(trim(pathname), '/', .True.)
Находит индекс последнего символа '/' в имени пути (вам может понадобиться найти его перед последним).
outfile_path=pathname(:idx)+'/inf/input.dat'
теперь будет путь, который вы хотите.