Fortran Coder

查看: 20369|回复: 3
打印 上一主题 下一主题

[文件读写] fortran怎样判断文件夹是否存在?

[复制链接]

32

帖子

9

主题

0

精华

专家

F 币
391 元
贡献
212 点
跳转到指定楼层
楼主
发表于 2020-4-9 22:20:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kyra 于 2020-4-10 08:07 编辑

打算在当前目录下的2003336的文件夹下打开一个名称为data.txt的文件并输入单个整型数据500
编程思路如下,判断在当前目录下是否存在2003336文件夹,如果存在2003336文件夹屏幕输出 'the file exist'
                       如果不存则屏幕输出'the file no exist and will be created'并创建该文件夹
                       接下来改变当前目录到2003336文件夹
                       最后打开文件data.txt写入整型数据500
                       程序结束
程序结果勉强可以接收,但存在一些问题:
(1)不论程序运行几次,标识文件夹2003336是否存在的数据istat始终===0,很显然不对呀?????
(2)第一次运行程序屏幕输出 'the file no exist and will be created',标识2003336文件夹不存在需要创建,但第二次第三次依然屏幕输出  'the file no exist and will be created' 并且屏幕还有一行
"子目录或文件已经存在"的语句提示。代表2003336文件夹应经存在了,也就是说不需要再次创建2003336文件夹了。这与自己的设定输出'the file no exist and will be created' 又有矛盾了???
(3)又仔细查了一下inquire函数,了解到inquire函数似乎只能查询文件,而不能查询文件夹,请问在fortran中有没有可以查询文件夹是否存在的函数或者判断方法?或者是其他可以实现目的的方法,谢谢了

图片分别表示第一次运行结果和第二次及更多次运行结果的情形

               代码如下:
[Fortran] 纯文本查看 复制代码
program main
character elname1*4, elname2*8, folder_name*15,filename*20
integer istat,istat2
real a
write(elname1, '(i4)') 200
write(elname2, '(i8)') 3336
folder_name=trim(adjustl(elname1))//trim(adjustl(elname2))    
inquire(file=trim(folder_name), exist=istat)                                 
write(*,*)istat
if (istat) then
   print*, 'the file exist'
else
   print*, 'the file no exist and will be created'
   istat2=system( "Md "//trim(folder_name)) 
end if 
istat2=CHDIR(trim(folder_name)) !改变当前目录到到文件夹
filename='data.txt' !打开写入数据的txt文件
open(308,file=filename,status='replace',form='formatted')
write(308,*) 500
close(308)
end program main


第一次运行结果.JPG (31.67 KB, 下载次数: 310)

第一次运行结果

第一次运行结果

第二次及多次运行结果.JPG (38.69 KB, 下载次数: 296)

第二次几多次运行结果

第二次几多次运行结果
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

260

帖子

0

主题

0

精华

版主

World Analyser

F 币
722 元
贡献
512 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
沙发
发表于 2020-4-10 08:11:26 | 只看该作者
你用intel fortran的话,可以用
Inquire(DIRECTORY="2003336",exist=b)

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
板凳
发表于 2020-4-10 08:40:01 | 只看该作者
fortran标准没有判断文件夹的功能,你可以直接open该文件夹中一个文件 open(10,file='2003336\data.txt',iostat=i,iomsg=msg) ,配合iostat 和 iomsg就知道是否存在文件夹。
[Fortran] 纯文本查看 复制代码
program test
  integer i, k
  character(80) msg
  open(10,file='2003336\data.txt',iostat=i,iomsg=msg)
  if(i/=0) then
    call execute_command_line('md 2003336')
    open(10,file='2003336\data.txt',iostat=i,iomsg=msg)
  end if
  if(i/=0) then
    write(*,"(a)") trim(msg)
  end if
  pause
end

32

帖子

9

主题

0

精华

专家

F 币
391 元
贡献
212 点
地板
 楼主| 发表于 2020-4-10 09:33:05 | 只看该作者
感谢kyra和li913,我才用了kyra的方案,再次感谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-27 11:18

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表