2017-07-16 55 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' 

將成爲您想要的路徑。