pasuka
发表于 2018-2-5 13:40:02
本帖最后由 pasuka 于 2018-2-5 13:42 编辑
mao 发表于 2018-2-5 13:35
谢谢。
看过OPEN的说明,我的代码应该是对的吧,现在的问题是:Status=‘OLD’时候, 文件存在会出错。 ...
文档不是说了吗?'OLD'-- The file already exists (nonexistence is an error). 文件若是不存在则报错
程序代码没有问题,不能推导出程序要打开的文件及其路径也没问题啊?
再说,Stack Overflow上面的帖子已经给出参考代码,为啥不试着跑跑呢?
师傅领进门,修行在自身。
mao
发表于 2018-2-5 13:54:20
pasuka 发表于 2018-2-5 13:40
文档不是说了吗?'OLD'-- The file already exists (nonexistence is an error). 文件若是不存在则报错
程 ...
谢谢回复,我试过如下代码。
文件不存在时候,新建和写入都正常。再执行一次(此时文件存在,刚新建的)就出错。所以路径应该是没有问题的,并且(io=0)这个文件是正常关掉的,下次打开不应该有问题的么。
program main
implicit none
logical :: exist
integer(kind=4):: a(20), i, io
a=(/(i,i=1,20)/)
inquire(file="te.dat", exist=exist)
if (exist) then
write(*,*) exist
open(10, file="te.dat", status="old")
read(10, *) a
close(10)
else
write(*,*) exist
open(10, file="te.dat", status="new")
write(10, *) a
close(10,iostat=io)
write(*,*) io
end if
write(*,"(10I3)") a
end
pasuka
发表于 2018-2-5 14:25:24
mao 发表于 2018-2-5 13:54
谢谢回复,我试过如下代码。
文件不存在时候,新建和写入都正常。再执行一次(此时文件存在,刚新建的) ...
MSYS2 + Gfortran 7.3.0 测试正常
program main
implicit none
logical:: exist
integer:: flag
character(len=8):: fn="demo.txt"
inquire(file=fn, exist=exist)
if (exist) then
write(*,*)"File already exists."
open(newunit=flag, file=fn, status="old")
write(flag, *)"Rewrite file."
close(flag)
else
write(*,*)"File does not exist"
open(newunit=flag, file=fn, status="new")
write(flag, *)"Create file."
close(flag)
end if
end program
mao
发表于 2018-2-5 15:16:52
本帖最后由 mao 于 2018-2-5 15:18 编辑
pasuka 发表于 2018-2-5 14:25
MSYS2 + Gfortran 7.3.0 测试正常
program main
implicit none
谢谢。
我也运行了你的代码,一样的: 第一执行次文件不存在,新建写入正常,第二次执行文件存在,segmentation fault.
这就是目前我遇到的问题:
(1) 文件存在时候,open出错。
(2) 同样的代码大家可以测试通过(环境包括CodeBlocks- by VVT,MSYS2+Gfortran by pasuka)
(3) 我用FTN95+plato也能实现
(4) 但是我在3台不同电脑上用 CodeBlocks+GNU Fortran Complier, 都有问题。
pasuka
发表于 2018-2-5 15:25:16
本帖最后由 pasuka 于 2018-2-5 15:31 编辑
mao 发表于 2018-2-5 15:16
谢谢。
我也运行了你的代码,一样的: 第一执行次文件不存在,新建写入正常,第二次执行文件存在,segmen ...
gfortran版本呢?CB自带是4.9系列吧?即使5.0版也有反馈出错的
https://sourceforge.net/p/tdm-gcc/bugs/270/
mao
发表于 2018-2-5 15:54:28
pasuka 发表于 2018-2-5 15:25
gfortran版本呢?CB自带是4.9系列吧?即使5.0版也有反馈出错的
https://sourceforge.net/p/tdm-gcc/bugs/2 ...
谢谢。
现在看起来极有可能是这个编译器版本问题。
弱弱地问下:我不太了解版本,我的版本应该是5.1.0,是么(如下)?我再仔细看下你发的连接,谢谢。
pasuka
发表于 2018-2-5 16:23:45
mao 发表于 2018-2-5 15:54
谢谢。
现在看起来极有可能是这个编译器版本问题。
命令行下面执行gcc -v或者gfortran -v就能查看版本号
mao
发表于 2018-2-5 18:14:36
pasuka 发表于 2018-2-5 16:23
命令行下面执行gcc -v或者gfortran -v就能查看版本号
谢谢,我先回去下载个新编译器看看,非常感谢。:-handshake
mao
发表于 2018-2-6 12:54:07
谢谢 VVT 和 pasuka 的回答。目前问题已经解决了: 是gFortran编译器版本的问题,如pasuka所说。
我从MinGW网站下载安装管理器,里面的版本是6.3.0版本,测试可以正常运行。
另请教下 pasuka,为啥我从MinGW下载的版本是6.3.0, 而你那边有更新的7.3.0版本?谢谢,
pasuka
发表于 2018-2-6 14:05:03
mao 发表于 2018-2-6 12:54
谢谢 VVT 和 pasuka 的回答。目前问题已经解决了: 是gFortran编译器版本的问题,如pasuka所说。
我从MinG ...
不客气
我不用CB这类IDE做Fortran程序开发,写Makefile也挺好啊
安装新版gcc可以用MSYS2