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