我不太喜欢这么做,但是如果我希望在这篇文章中找到答案,前进的方向并不清晰。因此,以下是前进的方法。
简短的版本
在Fortran 77/90中,要打开一个标准的Fortran二进制文件,你可能会写:
OPEN (5, FILE="myFile.txt")
但是要打开一个扁平的非Fortran二进制文件,你需要编写类似以下的代码:
OPEN(5, file="myFile.txt", form='unformatted', access='direct', recl=1)
这种差异是因为Fortran风格的二进制文件在每个“记录”周围都有4字节的头部和尾部。这些头/尾描述了记录中包含的数据大小。(在最常见的情况下,你遇到的每个二进制文件只会有一个记录。)
详细说明
Fortran假设许多默认的open
参数。实际上,我们的原始示例可以以以下冗长形式编写,以显示所有默认值。
OPEN (5, FILE="myFile.txt")
OPEN (5, FILE="myFile.txt", FORM="FORMATTED",
+ ACCESS="SEQUENTIAL", STATUS="UNKNOWN")
让我们来看看每个参数:
FORM 定义了一个文件是由文本 (form='formatted'
) 还是二进制数据 (form='unformatted'
) 组成。
ACCESS 定义了您是按顺序 (access='sequential'
) 还是按任意顺序 (access='direct'
) 从文件中读取数据。
RECL 定义了每个记录需要的字节数。例如,recl=1
表示记录长度为 1 个字节,可能是 1 字节的整数。
STATUS 定义了文件是否已经存在。参数 STATUS="UNKNOWN"
表示该文件可能尚不存在,但如果不存在,则将创建它。如果您想防止写入旧文件的可能性,请使用: STATUS="OLD"
。同样,如果您知道文件尚不存在,则应使用: STATUS="NEW"
。
更多信息:
这些打开语句也会影响接下来的读/写/关闭语句。在我的原始帖子中,我需要知道如果打开直接访问文件,则必须写入直接访问文件。(也就是说,在您的二进制文件中不会包含Fortran头/尾。)然而,Fortran 的默认功能是创建带有 Fortran 标头和脚注的顺序访问文件。
有关 Fortran 77/90 中的 open
语句的更多信息,请参阅以下在线资源:
Bishop 大学 Lin Jinsen 的一个不错的页面(非常感谢)。
IBM 官方编译器的略微更正式的文档。