-1

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

用户名1:message1:message2:...:messageN

用户名2:message1:message2:...:messageN

...

用户名N:message1:message2:...:messageN

如果文件中有一行用户名 == 用户名并附加了新消息,我想将 :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+ 模式尝试了这个。为了能够追加到当前行而不是文件末尾,我必须做什么?

4

3 回答 3

9

您不能在文件中间插入数据。如果您尝试写入,您将写入已经存在的数据。

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

  • fseek到你想写信的位置
  • fread从该点到文件末尾到缓冲区
  • fwrite你想插入什么
  • fwrite你读出的缓冲区
于 2013-03-25T00:47:52.190 回答
4

Jonathon Reinhart 回答的另一种选择是:

  • 逐行读取实际文件
  • 在添加某些用户的新消息时写入临时文件
  • 完成后(成功完成)删除原始文件并将临时文件重命名/移动到原始文件。

如果您一次添加多个用户的消息,这种方法将带来更高的性能(在每个用户都有一条新消息的最坏情况下)。

于 2013-03-25T00:59:51.163 回答
0

您需要的是一种比顺序文件更灵活的结构。使用某种形式的数据库,并将消息附加到用户的消息列表中。

于 2013-03-25T02:55:08.637 回答