2013-10-15 37 views
-1

有问题所以,我在我的程序中有这个功能,它应该将“car_str”结构保存到指定为参数的文件的所需位置。但是当我运行它时,它会一次又一次覆盖第一个插槽,就好像fseek没有指向文件中的指定位置。我的代码有问题吗?我认为这可能与乘法有关,因为如果没有它,程序会很好,但我不能指向我想要的地方。fseek()在C

void save(int car_nbr) 
{ 
    FILE *f; 

    f = fopen("memory.txt","wb"); 
    if (!f) 
    { 
     printf ("error"); 
    } 
    else 
    { 
     car_nbr--; 
     fseek(f, sizeof(struct car_str)*car_nbr, SEEK_SET); 
     fwrite(&car,sizeof(struct car_str),1,f); 
     rewind(f); 
     fclose(f); 
     printf("\nsaved"); 
    } 
} 
+0

乘法给你什么? – dutt

+2

'fseek'有一个返回值,告诉你它是否成功。你应该检查返回值。这是你期望的吗? – abelenky

+0

它应该给(car_nbr)乘以我的结构的字节大小 – SergiBJ

回答

0

你需要打开r + b。

,如果你不及格文件不存在,所以你可以尝试使用“WB”

“W” - 写:创建输出操作的空文件。如果已存在具有相同名称的文件,则其内容将被丢弃,并将该文件视为新的空文件。

“r +” - 读取/更新:打开一个文件进行更新(输入和输出)。该文件必须存在。

f = fopen("memory.txt","r+b"); 
+0

尝试过,仍然不能正常工作,我不认为这是问题,因为我只写这个函数。 – SergiBJ

+0

size_t pos = ftell(f);会告诉你文件中的读/写位置。 – SHR

+0

它完美地为我工作,只有理由你看到只有一个项目是与“WB”的开幕。 – SHR