2015-05-01 228 views
2

在以下C-代碼我打開一個名爲test.txt的文件,其中包含幾行。然後我在while循環中讀取這些行,並將它們打印到stdout。之後,我通過例如文件對文件進行了一些更改。附加數字42。然後我想打印更改文件的內容到stdout,但我似乎錯過了那裏的東西。這是到目前爲止我的代碼(評論不必要的):打開文件,打印到標準輸出,追加到文件,並再次打印到標準輸出

#include <stdio.h> 
#include <stdlib.h> /* for exit() */ 

main() 
{ /* Declare variables */ 
    FILE *file_read; 
    char file_save[100]; 
    int number = 42; 

    /* Open file */ 
    file_read = fopen("/home/chb/files/Cground/test.txt", "a+"); 

    /* Check if file exists. */ 
    if (file_read == NULL) { 
     fprintf(stderr, "Cannot open file\n"); 
     exit(1); 
    } 

    /* Print what is currently in the file */ 
    printf("This is what is currently in the file:\n"); 
    while(fgets(file_save, 100, file_read) != NULL) { 
    printf("%s", file_save); 
    } 

    /* Change the contents of the file */ 
    fprintf(file_read, "%d\n", number); 

    /* Print what is in the file after the call to fscanf() */ 
    printf("This is what is now in the file:\n"); 
    /* Missing code */ 
    fclose(file_read); 
} 

看來,一個簡單的while循環放置在Missing code是,類似於已經使用之前是不夠的一個。有人可以解釋發生了什麼事嗎?我不介意技術問題!

+3

你必須調用fseek(file_read,0,SEEK_SET);首先再次到達文件的開頭。 –

+0

你會發布它作爲一個真正的答案? (出色的名字順便!) –

+0

好的,完成了! (哈哈,是的,謝謝!) –

回答

1

爲了從一開始就讀取該文件再次,你必須先調用FSEEK(),像這樣

fseek(file_read, 0, SEEK_SET); 

這將流位置指示器迴文件的開頭。

有關更多信息,請參見http://www.cplusplus.com/reference/cstdio/fseek/

1

您不要將文件指針設置爲開始。由於它已經在文件末尾,所以沒有更多需要閱讀的內容了。 重新讀入文件之前,這樣做:

rewind(file_read); //before the "missing code" comment 

設置它回到了文件的開始。

+0

謝謝。在閱讀[fseek vs rewind]之後,我選擇了@ pfannkuchen_gesicht的解決方案(https://stackoverflow.com/questions/11839025/fseek-vs-rewind)。 Fseek具有返回成功的優點,而'rewind()'不會。 –

+0

同意,'fseek'確實比'rewind'更有優勢。 –

相關問題