首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带append的fseek()

使用带append的fseek()
EN

Stack Overflow用户
提问于 2014-09-22 05:22:06
回答 1查看 1.6K关注 0票数 1

我正在尝试使用这段代码,只是想要追加它,而不是覆盖文件。然而,当我使用"a“或"a+”模式时,fseek似乎无法工作。它不是像预期的那样写入文件"This is C Programming Langauge",而是写入"This is tutorialspoint.com C Programming Langauge“。如何才能不覆盖该文件?

我希望能够打开一个已经有文本的文件,将文件指针设置到某个点,并在不覆盖文件中任何其他内容的情况下将文本写入该点。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2014-09-22 06:57:26

fseek()工作时,您错误地认为它不工作。问题是,当您以"append“打开一个文件时,就像在fopen("file.txt", "a+");中一样,那么所有的写操作都将被附加到文件的末尾,而不管文件指针的位置。因此,fseek()会正确地将文件指针重新定位为7,但只要再次调用fput(),文件指针就会在输出发生之前定位到文件的末尾。

下面是一个示例,它在fseek()之后读取file.txt,以显示它位于您预期的位置:

代码语言:javascript
复制
#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);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25963995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档