我将用户名和推文存储在文件中,格式如下:
USERNAME1:MESSAGE1:消息2:...:messageN
USERNAME2:MESSAGE1:消息2:...:messageN
...
usernameN:MESSAGE1:消息2:...:messageN
如果文件有一行,其中username ==带有新消息的用户名,我想将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 +模式尝试了这个。为了能够附加到当前行而不是文件末尾,我该怎么做?
答案 0 :(得分:9)
您无法在文件中间插入数据。如果你试着写,你将会写出已经存在的数据。
如果你想这样做,你需要:
fseek
到您要写入的位置fread
从那一点到文件末尾的缓冲区fwrite
您要插入的内容fwrite
您宣读的缓冲区答案 1 :(得分:4)
Jonathon Reinhart回答的另一个选择是:
如果您一次添加多个用户的邮件,这种方法将带来更多性能(在每个用户都有新邮件的最坏情况下)。
答案 2 :(得分:0)
您需要的是一种比顺序文件更灵活的结构。使用某种形式的数据库,并将消息附加到用户的消息列表中。