Io 更改大型Fortran二进制文件的头而不处理整个文件体

Io 更改大型Fortran二进制文件的头而不处理整个文件体,io,fortran,binaryfiles,Io,Fortran,Binaryfiles,我有一个由Fortran 90程序生成的大型二进制文件(~GB大小)。我想修改文件头部的某些内容。该文件的结构非常复杂,包含许多不同的变量,我不想深入讨论这些变量。在读取并重新写入磁头后,是否可以在不了解其详细结构的情况下“复制并粘贴”文件的提醒?或者更好的是,我可以避免完全重写整个文件,而只对原始文件进行更改吗?(不确定这是否重要,但页眉的长度将被更改。)由于您正在更改页眉的长度,我认为您必须编写一个新的修订文件。通过使用流访问打开文件,只读取字节(如果文件是四个字节的倍数,则可能是四个字节的

我有一个由Fortran 90程序生成的大型二进制文件(~GB大小)。我想修改文件头部的某些内容。该文件的结构非常复杂,包含许多不同的变量,我不想深入讨论这些变量。在读取并重新写入磁头后,是否可以在不了解其详细结构的情况下“复制并粘贴”文件的提醒?或者更好的是,我可以避免完全重写整个文件,而只对原始文件进行更改吗?(不确定这是否重要,但页眉的长度将被更改。)

由于您正在更改页眉的长度,我认为您必须编写一个新的修订文件。通过使用流访问打开文件,只读取字节(如果文件是四个字节的倍数,则可能是四个字节的字),直到达到EOF并将它们复制到新文件,可以避免“理解”标题后的记录。但是,如果文件最初是作为顺序访问创建的,并且您希望将来以这种方式访问它,则必须处理头记录的记录长度信息,包括更改值以与更改后的记录长度保持一致。此记录长度信息通常在每个记录的开头和结尾都是一个四字节的整数,但这取决于编译器。

由于您要更改头的长度,我认为您必须编写一个新的修订文件。通过使用流访问打开文件,只读取字节(如果文件是四个字节的倍数,则可能是四个字节的字),直到达到EOF并将它们复制到新文件,可以避免“理解”标题后的记录。但是,如果文件最初是作为顺序访问创建的,并且您希望将来以这种方式访问它,则必须处理头记录的记录长度信息,包括更改值以与更改后的记录长度保持一致。此记录长度信息通常在每个记录的开头和结尾都是一个四字节整数,但这取决于编译器。

如果文件在每个记录的结尾都有校验和,则此信息不起作用。如果文件在每个记录的结尾都有校验和,则此信息不起作用。