在不创建新文件或临时文件的情况下更新/覆盖c中的文件

在不创建新文件或临时文件的情况下更新/覆盖c中的文件,c,file-handling,C,File Handling,我正在为具有如下文件格式的文件处理编写c代码: 应该可以使用新域添加新行,也可以修改现有域ID。通过修改ID,我的意思是,ID的数量可以增加或减少,比如在一个操作中,我应该能够在上面的示例中将ID4添加到Domain1,在另一个操作中,我应该能够删除Domain2的ID1作为示例 所以我的问题(谢谢你的帮助): 我不想创建临时/新文件并更改名称和删除旧文件。那么我可以读写现有的文件吗?如何确保安全?(我尝试了一些更新行的示例(使用fwrite),但我发现在一些尝试中添加一些字符(如ID4和其

我正在为具有如下文件格式的文件处理编写c代码:



应该可以使用新域添加新行,也可以修改现有域ID。通过修改ID,我的意思是,ID的数量可以增加或减少,比如在一个操作中,我应该能够在上面的示例中将ID4添加到Domain1,在另一个操作中,我应该能够删除Domain2的ID1作为示例

所以我的问题(谢谢你的帮助):

  • 我不想创建临时/新文件并更改名称和删除旧文件。那么我可以读写现有的文件吗?如何确保安全?(我尝试了一些更新行的示例(使用fwrite),但我发现在一些尝试中添加一些字符(如ID4和其他奇怪字符)时,会从下一行删除一些字符)。有样本代码吗

  • 后来我还需要使用文件锁定,所以一次只能读写一个文件。任何建议/链接,不胜感激

  • 非常感谢。

    将文件附加到您不需要临时文件或任何东西的文件中。如果要用等量的字符替换某些字符,也不需要临时文件


    但是如果要进行任何其他修改以更改内容的大小,则需要某种临时缓冲区。临时文件或内存缓冲区。

    谢谢你的回答,在我的情况下,每行修改后可以有更多或更少的字符,我不想创建一个新文件,但是的,我尝试创建一个带有新文本的字符串,并尝试进行写入。类似这样的东西:char-str[30];strcpy(str,“本地:IP:端口:1,3,5”);倒带(f);int dom_len=strlen(sds_域);int test1=ftell(f);printf(“行号%d”,test1);fwrite(str,1,strlen(str),f);但它会覆盖第二行中的文本。
    Domain1:IP:Port:Id1,Id2,Id3
    Domain2:IP:Port:Id1,Id2,