gpt4 book ai didi

C:同一个文件一个读指针,一个更新指针

转载 作者:太空狗 更新时间:2023-10-29 15:58:08 26 4
gpt4 key购买 nike

我需要构建一个读取每条记录的程序,并根据该记录信息更新同一文件中的一些其他记录。为此,我正在考虑这种方法:

int main(int argc, char *argv[]) {
FILE *my_file;
int files_read;
struct my_struct an_struct;

my_file = fopen("myfile.dat", "rb");

files_read = fread(&an_struct, sizeof(struct my_struct), 1, my_file);
printf("main->files_read: %d \n", files_read); //This prints one

while (files_read == 1) {
do_update();
files_read = fread(&an_struct, sizeof(struct my_struct), 1, my_file);
printf("main->files_read: %d \n", files_read); //This prints one
}

fclose(archivo_paises);
return 0;
}

在 main 函数中,我正在读取文件的内容,每次调用 read 时,我都会得到一个响应,直到到达文件末尾。问题出在 do_update 函数中:

void do_update() {
FILE *my_file;
int files_read;
struct my_struct an_struct;
struct my_struct another_struct;

my_files = fopen("myfile.dat", "wb+"); //Using rb+ solves it

files_read = fread(&an_struct, sizeof(struct my_struct), 1, my_file);
printf("do_update->files_read: %d \n", files_read);
//This printed zero!. Prints one using rb+

while (files_read == 1) { //This never gets executed. Unless you use rb+

if(something){
fwrite(&another_struct, sizeof(struct my_struct), 1, my_file);
// Using rb+, this returns zero and didn't update
}
files_read = fread(&an_struct, sizeof(struct my_struct), 1, my_file);
printf("do_update->files_read: %d \n", files_read);
}

fclose(my_file);
}

发生的事情是 files_read 变量在 read 调用后获得零值,因此永远不会执行更新文件的逻辑。

为什么在为 wb+ 打开文件时 read 返回零?

更新:do_update() 上使用 rb+ 作为文件模式是可行的,但现在对 fwrite() 的调用总是返回零,而且它没有更新文件。与模式有关吗?

最佳答案

fwrite正在将文件中的位置移动到文件末尾。 fread然后没有什么可读的。

使用 fgetposfwrite之前保存文件位置, 和 fsetposfwrite 之后重新设置位置.

关于C:同一个文件一个读指针,一个更新指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24615328/

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