c - 在 C 中,如何附加到文件行而不是文件末尾?

标签 c io printf

我将用户名和推文存储在以下格式的文件中:

用户名1:消息1:消息2:...:消息N

用户名2:消息1:消息2:...:消息N

...

用户名N:消息1:消息2:...:消息N

如果文件中有一行用户名 == 附加了新消息的用户名,我想将 :newMessage 附加到上面格式的行中。

我如何使用 C 来做到这一点(如果重要的话可以使用 cygwin)?这是我编写的代码块,但我遇到了问题。

         while(fgets(line, MAXBUFF, fp) != NULL){  // get each line of file
             if (strncmp(line, tweetUsr, strlen(tweetUsr)) == 0){
                 usrFound = 1;
                 fprintf(filePointer, ":");
                 fprintf(filePointer, tweet);
                 break;
             }

             memset(&line[0], 0, sizeof(line));  //reset line array
         }

我期望发生的情况是将消息附加到行尾,因为 filePointer 应该指向当前行的末尾,但实际发生的情况是消息被附加到文件的末尾.

我在 fopen 中使用 r+ 模式尝试了这一点。我必须做什么才能附加到当前行而不是文件末尾?

最佳答案

您无法在文件中间插入数据。如果您尝试写入,您将覆盖已经存在的数据。

如果您想这样做,您需要:

  • fseek 到您要写入的位置
  • fread 从该点到文件末尾写入缓冲区
  • fwrite您要插入的内容
  • fwrite 您读出的缓冲区

关于c - 在 C 中,如何附加到文件行而不是文件末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605992/

相关文章:

C、GTK : display stream of RGB images at < 60 fps

c++ - 位域如何与字符类型一起使用?

c - 在 C 中链接移位运算符后出现意外结果

c - 具有正确文件长度和缓冲区分配的 fread 段错误

bash - 如何使用 bash 和 printf 转换日期格式?

c++ - 混合 c 和 c++ 库(多 Unix 平台)

c++ - 打开相对于已执行模块的文件

python - 如果文件不存在则创建文件,然后以 RW 模式打开该文件

c++ - 使用 sync_with_stdio 时打印顺序

c - 使用函数后无法使用 fprintf()