打开指定状态和位置的文件

时间:2017-08-22 20:21:09

标签: io fortran

根据this source,我会解释说明状态=" old"应该默认添加:

  

OLD ,如果要打开但未替换文件

然而,这不是我的代码中发生的事情。这是一个例子:

program openstat_test
   implicit none
   integer :: mystat

   mystat=0
   print*,"Im trying to open a new file..."
   open( unit=100, file="output.txt", status="new", iostat=mystat )
   if ( mystat == 17 ) then
      print*,"File already exists; overwriting!"
      open( unit=100, file="output.txt", status="replace", iostat=mystat )
   end if
   if ( mystat /= 0 ) then
      print*, "Error prevents test..."; stop
   end if
   write( unit=100, fmt=* ) "Line number 1"
   close( unit=100)

   print*,"Im trying to open an old file..."
   open( unit=100, file="output.txt", status="old", iostat=mystat )
   if ( mystat /= 0 ) then
      print*, "Error prevents test..."; stop
   end if
   write( unit=100, fmt=* ) "Line number 2"
   close( unit=100)

   print*,"Im trying to open an old file AND FORCING APPEND..."
   open( unit=100, file="output.txt", status="old", position="append", iostat=mystat )
   if ( mystat /= 0 ) then
      print*, "Error prevents test..."; stop
   end if
   write( unit=100, fmt=* ) "Line number 3"
   close( unit=100)

end program openstat_test

(" output.txt"只有"第2和第34行;"第3和第34行;第二次打开使用状态="旧& #34;被覆盖)

我错过了什么吗?你总是需要指定位置="追加"即使状态="老"?如果是这样,为什么引用指定" old"如果默认写入命令将覆盖文件,则表示打开但不替换?

类似地,使用position =" append"是否安全?没有状态(或使用"未知")来创建新文件或文件是否存在附加到它?我尝试了它并且它有效,但是here说,安全的方法是选择案例而不是真正解释为什么或什么可能出错。

1 个答案:

答案 0 :(得分:0)

在文件系统级别,删除文件然后创建具有相同名称的文件并覆盖文件内容之间可能存在差异。这可能与属性或权限等有关。

status='old'表示命名文件在连接时存在。对于存在的文件,status='replace'首先删除该文件,然后创建一个具有相同名称的新文件。

正如您所看到的,status='old'导致覆盖是合理的。您引用的参考文献并未准确说明Fortran标准所说的内容。

不提供position=...,默认值为'asis'。在文件当前未连接的情况下,文件位置未指定。如果您想附加,则应明确提供position='append'

使用status='unknown'(默认值),状态取决于处理器。明确说出这意味着什么是不可能的。