我在读取 C 中的二进制文件时遇到以下问题。
我已经读取了二进制文件的前 8 个字节。现在我需要从第 9 个字节开始阅读。以下是代码:
fseek(inputFile, 2*sizeof(int), SEEK_SET);
但是,当我打印存储检索到的值的数组内容时,它仍然显示前 8 个字节,这不是我需要的。
谁能帮我解决这个问题?
我在读取 C 中的二进制文件时遇到以下问题。
我已经读取了二进制文件的前 8 个字节。现在我需要从第 9 个字节开始阅读。以下是代码:
fseek(inputFile, 2*sizeof(int), SEEK_SET);
但是,当我打印存储检索到的值的数组内容时,它仍然显示前 8 个字节,这不是我需要的。
谁能帮我解决这个问题?
假设:
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
)
fseek
只是移动文件流的位置指针;一旦你移动了位置指针,你需要调用fread
从文件中实际读取字节。
但是,如果您已经使用 读取了文件的前 8 个字节fread
,则位置指针将指向第 9 个字节(当然,假设没有发生错误并且文件至少有 9 个字节长)。当您调用 时fread
,它会将位置指针前进读取的字节数。你不必打电话fseek
来移动它。