gpt4 book ai didi

C:更新文件中的多个记录

转载 作者:行者123 更新时间:2023-11-30 15:31:39 26 4
gpt4 key购买 nike

这是此的后续内容:C: One pointer for reading and one pointer for updating the same file .

函数do_update()旨在根据条件更新文件上的多个记录。但是,该功能不起作用:

void do_update(char name[]) {
FILE *my_file;
int records_read;
int records_written;
struct my_struct an_struct;
struct my_struct empty_struct = {"", -1};

my_file = fopen("consulta.dat", "rb+");

records_read = fread(&an_struct, sizeof(struct my_struct), 1, my_file);
while (records_read == 1) {
if(strcmp(name, an_struct.name) == 0){
records_written = fwrite(&empty_struct, sizeof(struct my_struct),
1, my_file);
//At first match this returns one, other matches return 0.
//It never updates the file
}
records_read = fread(&an_struct, sizeof(struct my_struct), 1, my_file);
}

fclose(my_file);
}

fwrite 调用不会更改文件上的记录。我正在检查这个函数的返回值,第一次匹配它返回1,如果有另一个匹配它返回0。但是,当我再次打开该文件时,没有记录被修改。

有人可以帮我解决这个问题吗?

最佳答案

你可以试试这个。由于这是一个 do-while 循环,因此在循环之前不需要 fread。 do 总是会执行该 block 一次。您需要声明long fileposition;。在第一个 fseek 中,-sizeof 应该将文件位置移回到刚刚读取的结构的开头并允许您写入。第二个 fseek 应该让您再次阅读。

do {
records_read = fread(&an_struct, sizeof(struct my_struct), 1, my_file);
if(strcmp(name, an_struct.name) == 0){
fseek ( my_file, -sizeof(struct my_struct), SEEK_CUR);
records_written = fwrite(&empty_struct, sizeof(struct my_struct),
1, my_file);
fileposition = ftell ( my_file);
fseek ( my_file, fileposition, SEEK_SET);
}
} while (records_read == 1);

关于C:更新文件中的多个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24617947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com