【问题标题】:Using fseek() with append使用带有附加功能的 fseek()
【发布时间】:2014-09-21 21:22:05
【问题描述】:

我正在尝试使用此代码,但我不想覆盖我只想附加它的文件。但是,当我使用“a”或“a+”模式时,fseek 似乎不起作用。正如预期的那样,它没有写入文件“This is C Programming Language”,而是写入“This is tutorialspoint.com C Programming Language”。我该怎么做才能不覆盖文件?

我希望能够打开一个已经包含文本的文件,将文件指针设置到某个点,然后将文本写入该点,而不会覆盖文件中的任何其他内容。

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);
}

【问题讨论】:

标签: c


【解决方案1】:

您错误地认为fseek() 不工作,而实际上它正在工作。 问题是当你打开一个“追加”文件时,如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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2014-06-27
    • 2023-03-03
    相关资源
    最近更新 更多