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
页: 1 [2] 3
查看完整版本: open打开已有文件出错,segmentation fault, invalid memory reference