c - C语言读取二进制文件

标签 c file-io binaryfiles

我在用 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);

或者使用 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。 (大小 1 作为 fread 的第二个参数提供)

关于c - C语言读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2564831/

相关文章:

c - 如何不使用(fgets)继续扫描直到换行C

c - fwrite(),将我的输入和一些垃圾写入我的文件

python - Go build不会从脾气暴躁的生成Go代码生成二进制文件吗?

asp.net-mvc-4 - 如何使用 MVC 4 显示数据库中的二进制图像以编辑表单

unix - unix 的字符串命令如何工作?

c++ - 是否可以为某个表达式#define 两个单词,而不仅仅是一个单词?

使用参数调用 Unix 外部命令

Java IO,这些资源会自动关闭吗?

c++ - 从文本文件初始化 vector

windows - 在 Windows 上模拟文件错误(例如 ERROR_ACCESS_DENIED)