c - 不正确的二进制文件读取
问题描述
我是 C 新手,正在尝试将结构读取和写入 .dat 文件。添加数据时,我会看到 .dat 文件中的字符。但是,我无法读取数据,并且我的代码在每次出现结构时都应该输出“val”时什么也不输出。
我查看了许多来源,但我找不到我的代码与那些有什么不同。
https://www.geeksforgeeks.org/readwrite-structure-file-c/ 该网站用于初步了解如何执行此操作。
读/写 C 中的二进制文件 我用它来查看如何修复我的代码,但解决方案没有帮助。
我尝试更改 while 循环中的语句。
struct person
{
int id;
char lastName[15];
char firstName[15];
char age[4];
};
int main(void) {
//create new file
FILE *fp = fopen("file.dat", "wb+");
struct person a = {10, "Smith", "John", 25};
fwrite(&a, sizeof(a), 1, fp);
struct person b = {2, "Ali", "Jon", 12};
fwrite(&b, sizeof(b), 1, fp);
struct person c = {19, "Walter", "Martha", 82};
fwrite(&c, sizeof(c), 1, fp);
struct person p;
while(fread(&p, sizeof(p), 1, fp))
printf("val");
}
目前,它应该打印 3 个“Vals”,因为 dat 文件中添加了三个人。但是,没有任何东西被打印出来。
我很感激帮助。
解决方案
当您完成写入记录时,文件指针(“光标”,您正在读取/写入的位置)位于文件末尾。rewind()
您必须使用或在尝试从文件中读取之前fseek()
将该位置设置回文件的开头。fsetpos()