Fortran OPEN语句指定status='replace'且文件不存在时的标准规定及行为咨询
Fortran OPEN语句中
status='replace'在文件不存在时的行为及标准规定 让我来帮你理清Fortran标准里关于status='replace'的明确规定,尤其是你关心的文件不存在时的行为:
核心行为(标准强制要求)
status='replace'的设计逻辑就是无条件生成全新的目标文件,具体分两种情况:
- 如果目标文件已经存在:标准要求编译器先删除原有文件,再创建同名的新空文件,操作完成后文件的状态会被设置为
OLD。 - 如果目标文件不存在:标准直接要求编译器创建这个新的空文件,创建完成后文件的状态同样会被设置为
OLD。
简单来说,不管文件之前存在与否,status='replace'都会给你一个干净的新文件,不会因为文件不存在而报错或出现其他异常行为。
关于编译器实现的依赖性
这个行为是Fortran 90及后续所有标准(包括F95、F2003、F2008、F2018)明确规定的,所有合规的Fortran编译器(比如gfortran、ifort、NVFortran等)都必须严格遵循这个逻辑,不存在编译器之间的差异。你不需要担心不同编译器会有不同的处理方式。
举个简单的代码示例验证这个行为:
program test_replace_status implicit none integer :: file_unit ! 使用replace打开文件,不管是否存在都会生成新文件 open(newunit=file_unit, file="demo.txt", status='replace') write(file_unit, *) "This is a brand new file." close(file_unit) end program test_replace_status
运行这段代码后,无论demo.txt之前是否存在,最终都会得到只包含上述一行内容的新文件。
内容的提问来源于stack exchange,提问作者Stef1611
相关产品推荐
相关产品推荐

