在Fortran中写入二进制文件需要使用`OPEN`语句,并指定文件属性为`ACCESS='DIRECT'`或`ACCESS='STREAM'`,同时采用未格式化文件(`Form='Unformatted'`)模式。以下是具体步骤和示例代码:
一、基本语法
打开文件 使用`OPEN`语句打开文件,需指定文件名、访问模式、文件属性及记录长度(`RECL`)。
```fortran
OPEN (UNIT=unit_number, FILE='filename.bin',
ACCESS='DIRECT', ! 直接存取模式
FORM='UNFORMATTED', ! 未格式化文件
RECL=record_length) ! 记录长度(单位:字节)
```
写入数据
使用`WRITE`语句将数据写入文件,需确保数据类型与文件格式匹配。
```fortran
WRITE (unit=unit_number) data_variable
```
关闭文件
使用`CLOSE`语句关闭文件。
二、示例代码
以下是写入和读取二进制文件的完整示例:
1. Fortran写入二进制文件
```fortran
program write_binary_file
implicit none
integer, parameter :: unit=10
real(kind=8), dimension(10) :: data = [0.1d0, 0.2d0, 0.3d0, 0.4d0, 0.5d0,
-0.1d0, -0.2d0, -0.3d0, -0.4d0, -0.5d0]
integer :: i
! 打开文件(直接存取,未格式化)
OPEN (unit=unit, FILE='data.bin', ACCESS='DIRECT', FORM='UNFORMATTED', RECL=8)
! 写入数据
DO i = 1, SIZE(data)
WRITE (unit=unit) data(i)
END DO
! 关闭文件
CLOSE (unit)
end program write_binary_file
```
2. Fortran读取二进制文件
```fortran
program read_binary_file
implicit none
integer, parameter :: unit=10
real(kind=8), dimension(10) :: data
integer :: i
! 打开文件(直接存取,未格式化)
OPEN (unit=unit, FILE='data.bin', ACCESS='DIRECT', FORM='UNFORMATTED', RECL=8)
! 读取数据
DO i = 1, SIZE(data)
READ (unit=unit) data(i)
END DO
! 关闭文件
CLOSE (unit)
! 输出结果
PRINT *, 'Read data:', data
end program read_binary_file
```
三、注意事项
数据类型匹配
写入时需确保数据类型与文件格式一致(如`REAL*8`对应8字节双精度浮点数)。
记录长度(RECL)
- 若采用 顺序存取模式(默认),需在文件开头添加记录长度标识符(通常为4字节);
- 若采用 直接存取模式,则无需记录长度标识符,但需确保每次写入的数据长度一致。
平台差异
- Windows系统建议使用`FORM='UNFORMATTED'`,而Linux系统需使用`/assume:byterecl`编译选项。
错误处理
实际应用中应添加错误处理代码,例如检查文件是否成功打开。
四、补充说明
若需按固定长度记录存储(如结构体),建议使用顺序存取模式,并在数据文件中添加长度前缀;直接存取模式适用于连续存储的数值数据。
数据对齐:
Fortran默认按自然对齐存储,若需特定对齐方式,需使用`ALIGN=alignment`参数。
通过以上方法,可以高效地在Fortran中读写二进制文件,确保数据完整性和兼容性。