问题描述
假设我的目录设置如下(作为示例):
如何使用相对路径读取 read.f95 文件中的 file.txt?
我尝试使用相对路径作为
open(10,file='./Files/file.txt')
和
open(10,file='../Files/file.txt')
但是我在两种方式上都遇到了路径错误。我发现了 this 个问题,但问题是文件名太长,这不是我要问的问题。
解决方法
假设您有这样的结构:
.
|-- code
| |-- relative
| `-- relative.F90
`-- data
`-- data.dat
并且您希望从包含 code
和 data
的目录中运行您的代码。在这种情况下,您始终可以将当前目录的位置和数据的位置连接起来:
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
非常有意义。