4

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

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

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

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

谁能帮我解决这个问题?

4

2 回答 2

11

假设:

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);

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

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

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


PS:我的代码在这里读取字节作为你的问题。(尺寸 1 作为 的第二个参数提供fread

于 2010-04-02T05:33:11.903 回答
10

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

但是,如果您已经使用 读取了文件的前 8 个字节fread,则位置指针将指向第 9 个字节(当然,假设没有发生错误并且文件至少有 9 个字节长)。当您调用 时fread,它会将位置指针前进读取的字节数。你不必打电话fseek来移动它。

于 2010-04-02T03:13:34.580 回答