关闭时是否将多余的数据写入文件?

时间:2019-07-19 12:42:31

标签: io fortran

如果我将数据写入文件如下:

program main

  implicit none

  integer :: err
  real (kind=4), dimension(3) :: buffer

  buffer(1) = 1.2
  buffer(2) = 3.7
  buffer(3) = 0.1

  open(unit=36, file='test.dat', iostat=err, form='unformatted', action='write', status='new')

  write(36) buffer

  close(36)

end program

我希望文件为12个字节,因为实际数据类型的大小为4,并且我要在文件中插入3个实数值(4x3 = 12)。但是,如果我在shell中键入以下内容:

$ ls -lh test.dat

它表示文件为20个字节。

1 个答案:

答案 0 :(得分:2)

Fortran未格式化的文件不是“二进制”文件,它们仍然具有记录结构。因此,通常会有超出您所写内容的额外数据来存储有关记录的信息-通常这是记录的长度,或者可能是记录结束标记。因此,您的文件大于原始数据。

也不要对种类编号使用显式常量-我可以向您展示real(4)无法编译的编译器。而是使用Selected_real_kind或类似名称,或者使用固有模块iso_fortran_env中的常数,或者可能使用iso_c_binding中的常数。