我正在尝试使用这段代码,只是不覆盖我想附加的文件。但是,当我使用模式“a”或“a+”时,fseek似乎不起作用。它没有像预期的那样写入文件“This is C Programming Langauge”,而是写入“This is tutorialspoint.com C Programming Langauge”。如何才能不覆盖文件?
我希望能够打开一个已经有文本的文件,将文件指针设置为某个点,并将文本写入该点,而不覆盖文件中的任何其他内容。

int main ()
{
  FILE *fp;

  fp = fopen("file.txt","w+");
  fputs("This is tutorialspoint.com", fp);

  fseek( fp, 7, SEEK_SET );
  fputs(" C Programming Langauge", fp);
  fclose(fp);

  return(0);
}

最佳答案

fseek()工作时,您错误地认为它不工作。
问题是,当您打开“append”文件时,如fopen("file.txt", "a+");
然后,不管文件指针的位置如何,所有写操作都将追加到文件末尾。因此,发生的情况是fseek()正确地将文件指针重新定位到7,但是只要再次调用fputs(),文件指针就会在输出发生之前定位到文件的末尾。
下面是一个在fseek()之后从file.txt中读取的示例,显示它是
定位在您期望的位置:

#include <stdio.h>

int main ()
{
   FILE *fp;
   char buffer[100];

   fp = fopen("file.txt","a+");
   fputs("This is tutorialspoint.com", fp);

   fseek( fp, 7, SEEK_SET );
   fgets(buffer, sizeof(buffer), fp);
   printf("Buffer-->%s<--\n", buffer);
   fseek( fp, 7, SEEK_SET );
   fputs(" C Programming Langauge", fp);
   fclose(fp);

   return(0);
}

关于c - 使用fseek()和append,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25963995/

10-11 15:35