解析二进制文件中的结构内容

Jef*_*rey 5 .net c# binary parsing fortran

使用C#,我需要读取使用FORTRAN创建的压缩二进制文件.该文件存储在为(在"未格式化连续文件"部分大约中途下页)这里所描述的"无格式顺序"格式:

http://www.tacc.utexas.edu/services/userguides/intel8/fc/f_ug1/pggfmsp.htm

正如可以从URL看到,该文件被组织成130字节或更少字节的"块",并且包括围绕每个组块2长度个字节(由FORTRAN编译器插入).

因此,我需要找到一种有效的方法来解析实际的文件有效负载,而不是插入编译器的格式.

一旦我从文件中提取了实际的有效负载,我就需要将其解析为不同的数据类型.这将是下一个练习.

我的第一个想法是使用将整个文件篡改为字节数组File.ReadAllBytes.然后,只需遍历字节,跳过格式化并将实际数据传输到第二个字节数组.

最后,那第二个字节数组应该包含实际的文件内容减去所有格式,这我倒是则需要通过后面去得到我所需要的.

由于我对C#还不熟悉,我认为可能有一种更好,更可接受的解决方法.

此外,如果它有用,这些文件可能相当大(比如说30MB),但大多数会小得多......

Ste*_*ary 1

读取此类文件的一种方法是逐条记录(例如,读取长度字节,然后读取数据块,构建记录列表,这些记录只是字节数组)。然后记录的集合被传递到进一步的解析例程。

但是,如果您使用的是 4.0,则有一个新的文件映射类,它会更高效,但工作方式与ReadAllBytes.

如果您正在使用ReadAllBytesMemoryMappedFile最好通过首先解析所有记录长度来在大型二进制文件中构建内存中“索引”。如果您只需要某些记录,这尤其有用。