2017-07-16 66 views
0

如何使用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之前的父目录中读取。那可能吗?

+0

我更新了帖子! – Peter

+1

你不能直接在Fortran中那样做。您需要以字符串的形式获取当前目录并自己完成操作。看到这里https://stackoverflow.com/q/30279228/1004168 – agentp

+0

对不起,我有点FORTRAN没有经验。我怎么能这样做?我应该在某个地方包括CD还是“严格手动”? – Peter

回答

1

不幸的是,没有独特的方法来做到这一点,因为路径依赖于操作系统。为了以一种可靠的方式实现这一点,您可能需要定义一个在预处理时查找操作系统的函数(参见编译标志,例如here)。

对于* nix系统(UNIX,包括OSX和Linux),您所提供的选项应该足够

../ 
路径

转到上一层目录。

但是,在Windows中,我无法知道要进入上述目录(我目前没有Windows系统)。 但是,您可以使用GetModuleFileName API function解决此限制。 (注意,这将不会在系统上运行以上)

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' 

将成为您想要的路径。