如何跳过Fortran无格式文件中的数组?

xeb*_*btl 2 io fortran binaryfiles

我的程序在Fortran中读取"未格式化"的文件.除此之外,这个文件包含一个我的程序不需要的数组,但是它可以变得非常大.我想跳过这个数组.

如果这是编写数据的程序:

program write
  real :: useless(10), useful=42

  open(123, file='foo', form='unformatted')
  write(123) size(useless)
  write(123) useless
  write(123) useful
end program write
Run Code Online (Sandbox Code Playgroud)

然后这适用于阅读:

program read
  integer :: n
  real, allocatable :: useless(:)
  real :: useful

  open(123, file='foo', form='unformatted')
  read(123) n
  allocate(useless(n))
  read(123) useless
  read(123) useful

  print*, useful
end program read
Run Code Online (Sandbox Code Playgroud)

但我想避免分配"无用"数组.我发现了这个

program read2
  integer :: n, i
  real :: useless
  real :: useful

  open(123, file='foo', form='unformatted')
  read(123) n
  do i=1,n
     read(123) useless
  end do
  read(123) useful

  print*, useful
end program read2
Run Code Online (Sandbox Code Playgroud)

不起作用(因为记录长度被写入文件 [编辑,请参阅francescalus'答案]).

不能更改文件的格式.

fra*_*lus 5

读取比记录中更少的文件存储单元并不是罪过.

program read
  real :: useful

  open(123, file='foo', form='unformatted')
  read(123)
  read(123)
  read(123) useful

  print*, useful
end program read
Run Code Online (Sandbox Code Playgroud)

每个"空"读取仍会提前连接以进行顺序访问的文件的记录.

作为进一步评论:第二次尝试不会因"记录长度"而失败.由于尝试读取单独的记录,它失败了.在许多SO帖子中可以找到这种差异的重要性的例子.