在c中将数据插入文件

时间:2010-07-16 11:48:57

标签: c file pointers fseek

我需要在现有文件中的45 th 字节之前添加一个字符串。我尝试使用fseek,如下所示。

int main()
{
    FILE *fp;
    char str[] = "test";     

    fp = fopen(FILEPATH,"a");
    fseek(fp,-45, SEEK_END);                
    fprintf(fp,"%s",str);
    fclose(fp);     
    return(0);
}

我希望这段代码会在EOF的45 th 字符之前添加“test”,而只是将“test”附加到EOF。

请帮我找到解决方案。

这是我之前的问题的延续 Append item to a file before last line in c

3 个答案:

答案 0 :(得分:11)

使用模式r +(如果已存在)或+(如果它不存在并且您想要创建它)打开它。由于你在文件结束之前寻找45个字节,我假设它已经存在。

fp = fopen(FILEPATH,"r+");

你的其余代码很好。另请注意,这不会插入文本,但会覆盖文件中当前位置的任何内容。

即,如果您的文件如下所示:

xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx

然后在运行此代码后,它将如下所示:

xxxxxxxtestxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx

如果你真的想插入而不是覆盖,那么你需要将SEEK_END-45到EOF的所有文本都读到内存中,写下 test 然后再写回来

答案 1 :(得分:3)

如果您计划在任意位置书写,请不要将其作为追加(a)打开;它会强制所有写入到文件末尾。您可以使用r+在任何地方阅读或书写。

答案 2 :(得分:0)

要避免特定于平台的配置,请始终在fopen()调用中明确指出二进制或文本模式。

如果您将代码移植一天,这将为您节省数小时的绝望。