如何从 Fortran 中的相对路径读取文件?

问题描述

假设我的目录设置如下(作为示例):

如何使用相对路径读取 read.f95 文件中的 file.txt?

我尝试使用相对路径作为

open(10,file='./Files/file.txt')

open(10,file='../Files/file.txt')

但是我在两种方式上都遇到了路径错误。我发现了 this 个问题,但问题是文件名太长,这不是我要问的问题。

解决方法

假设您有这样的结构:

.
|-- code
|   |-- relative
|   `-- relative.F90
`-- data
    `-- data.dat

并且您希望从包含 codedata 的目录中运行您的代码。在这种情况下,您始终可以将当前目录的位置和数据的位置连接起来:

program relative

   implicit none 

   real :: x,y

   character (len=255) :: cwd
   call getcwd(cwd)

   open (10,file = trim(cwd)//'/data/data.dat',status = 'old')
   read (10,*) x,y
   close(10)
   write(*,y

end program

while 数据文件:data.dat 看起来如下

0.1 0.2

一旦你运行它,你就会得到你想要的:

> ./code/relative
  0.100000001      0.200000003

但是,使用这种方法时必须格外小心。它仅在某些位置有效 - 只要 data/data.dat 存在,它就会有效。如果您将作业提交为批处理,它可能很有用。假设您不知道代码最终会在哪里(就明确位置而言)。在这种情况下,您不能对其进行硬编码 - 这是没有意义的。因此,您有两种选择:您可以使用一些包装脚本并通过参数将位置传递到您的代码中,或者您可以确保目录结构看起来像您想要的那样并且您知道一切都已就位。在这种情况下,使用 getcwd 非常有意义。