c - 将 fseek() 与附加一起使用

标签 c

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

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

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() 不起作用,而实际上它正在起作用。 问题是,当您打开“追加”文件时,如 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() 与附加一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25963995/

相关文章:

c - 在 linux 上用 C 语言打开系统调用

python - 如何在 cython 中处理任意大的数字?

c - 为什么 Perl 的本地时间函数(和 C 的 tm 结构)中的年份值相对于 1900 年?

c - 如何在 Flex 的另一个定义中使用以前的正则表达式定义?

c - 解析六边形网格

c - TCP 客户端对于特定图像 (.bmp) 失败

c - 如果传递了冲突的编译器标志,GCC 会如何表现?

c - 如何从下载的 Linux 源代码编译模块?

C18 sprintf() 给出语法错误

c - 将文本读入缓冲区后如何逐行读取?