Fortran标准提供了inquire函数查询文件的状态,但并未提供查询文件夹是否存在的功能,部分编译器会额外提供某些扩展来实现。gfortran将文件夹同样视为文件,因此可通过inquire函数的file参数查询(经测试,linux和win均可):
program test_gfortranimplicit nonelogical isExist!查询文件夹ab是否存在inquire(file='ab',exist=isExist)print*,isExistend program
intel fortran编译器(ivf)为inquire函数提供了directory参数用于查询文件夹状态(编译器扩展功能,非标准用法):
program test_ivfimplicit nonelogical isExist!查询文件夹ab是否存在inquire(directory='ab',exist=isExist)print*,isExistend program
为了增强代码的可移植性,这里给出一个查询文件夹是否存在的函数。该函数全部由fortran标准语法写成,其思路是强制在指定文件夹下建立新文件,通过是否操作成功来判断文件夹是否存在。需要注意,使用该函数时需要确保用户拥有指定路径下的写权限,否则判断结果可能有误(话说回来,如果没有写权限,判断文件夹是否存在也就没啥意义)。
function inquireDIR(dir) result(res)implicit nonecharacter(*), intent(in):: dircharacter(*), parameter:: fn ='/f.f' !文件名随意logical resinteger i, uinquire(file=trim(dir)//fn,exist=res) if(res) returnu = -huge(u)open(newunit=u,file=trim(dir)//fn,iostat=i) if(i==0) res = .true.close(u,status='delete')end functionprogram Testimplicit nonelogical,external::inquireDIRprint*,inquireDIR('ab')end program Test