我正在尝试使用此代码,但我不想覆盖文件,只是想附加它。但是,当我使用模式“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/