2014-09-21 185 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); 
}