在C中读取二进制文件

时间:2010-04-02 03:11:30

标签: c file-io binaryfiles

我遇到了在C中读取二进制文件的问题。

我已经读过二进制文件的前8个字节。现在我需要从第9个字节开始读取。以下是代码:

fseek(inputFile, 2*sizeof(int), SEEK_SET);

但是,当我打印存储检索值的数组的内容时,它仍然显示前8个字节,这不是我需要的。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:10)

假设:

FILE* file = fopen(FILENAME, "rb");
char buf[8];

您可以读取前8个字节,然后读取接下来的8个字节:

/* Read first 8 bytes */
fread(buf, 1, 8, file); 
/* Read next 8 bytes */
fread(buf, 1, 8, file);

或者使用fseek跳过前8个字节并读取接下来的8个字节(如果将文件中的第一个字节计为0,则为8 ... 15):

/* Skip first 8 bytes */
fseek(file, 8, SEEK_SET);
/* Read next 8 bytes */
fread(buf, 1, 8, file);

理解这一点的关键是C库函数会自动将当前位置保留在文件中。 fread在执行读取操作时移动它,因此下一个fread将在上一个完成后立即开始。 fseek只是移动它而不阅读。


P.S。:我的代码在这里读出了 bytes 。 (作为fread的第二个参数提供的大小1)

答案 1 :(得分:8)

fseek只移动文件流的位置指针;一旦移动了位置指针,就需要调用fread来实际读取文件中的字节。

但是,如果您已经使用fread从文件中读取了前八个字节,则位置指针指向第九个字节(假设没有错误发生且文件长度至少为9个字节,当然)。当您调用fread时,它会将位置指针前移一个读取的字节数。您无需致电fseek移动它。