我遇到了在C中读取二进制文件的问题。
我已经读过二进制文件的前8个字节。现在我需要从第9个字节开始读取。以下是代码:
fseek(inputFile, 2*sizeof(int), SEEK_SET);
但是,当我打印存储检索值的数组的内容时,它仍然显示前8个字节,这不是我需要的。
有人可以帮我解决这个问题吗?
答案 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
移动它。