2014-09-21 186 views
0

我想使用此代码,除了覆盖文件,我想只是追加它。但是,当我使用模式“a”或“a +”时,fseek似乎不起作用。如预期的那样,它不写入“This is C Programming Langauge”文件,而是写入“This is tutorialspoint.com C Programming Langauge”。我能做什么来不覆盖文件?使用fseek()与追加

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

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

的[文件时,在“被打开FSEEK不工作可能重复“(append)模式](http://stackoverflow.com/questions/10631862/fseek-does-not-work-when-file-is-opened-in-a-append-mode) – Thomas 2014-09-21 21:26:29

回答

1

您错误地认为fseek()在工作时不工作。 问题是,当您打开一个文件作为“追加”时,如fopen("file.txt", "a+");, 那么所有写入都将追加到文件末尾,而不管文件指针的位置如何。因此,fseek()会将文件指针正确地重新定位到7,但是一旦再次调用fputs(),文件指针就会在输出发生之前定位到文件末尾。

这里是从file.txt的读取fseek()后,表示它正在 定位在你期望一个例子:

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