在c中将数据插入文件

aru*_*run 4 c pointers file fseek

我需要在现有文件中的 45 字节之前添加一个字符串.我尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)

我期望这段代码会在EOF的 45 字符之前添加"test" ,相反,它只是将"test"附加到EOF.

请帮我找到解决方案.

这是我之前的问题的延续,
将项目附加到c中最后一行之前的文件中

blu*_*oon 11

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

fp = fopen(FILEPATH,"r+");
Run Code Online (Sandbox Code Playgroud)

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

即,如果您的文件看起来像这样:

xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

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

xxxxxxxtestxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

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