2014-01-05 226 views
0

我已經寫了下面的代碼(作爲大學的ab分配的一部分),試圖將1 int保存到文本文件(使用fprintf)和一個類型爲Flight的結構數組一個.bin文件。看起來這兩個都是空的。我在程序開始時調用讀取,並在退出時或在選擇「保存」選項時進行寫入。讀取必須首先獲取int值,因爲它是有多少元素(因此需要讀取/寫入多少元素)的關鍵計數器。無法讀取和寫入文件C

我看了其他答案,甚至基於我的一些代碼,但是在閱讀和重新閱讀後,我仍然找不到解決方案,因此我發佈了一個新問題。

這是寫入部分,文件是f​​lyC.txt(用於存儲計數器)和fly.bin來存儲結構數組。

void writeFlight(){ 
    FILE * cpt; 

    if ((cpt = fopen("flyC.txt", "wb")) == NULL) 
    { 
     printf("ERROR: Flight Count File Could Not Be Opened/Written To \n"); 
    } 

    fprintf(cpt, "%d", curFly); 

    FILE * fpt; 

    if ((fpt = fopen("fly.bin", "wb")) == NULL) 
    { 
     printf("ERROR: Flight File Could Not Be Opened/Written To \n"); 
    } 

    fwrite(flyList, curFly * sizeof(struct Flight), 1, fpt); 
    fclose(fpt); 
} 

這裏是閱讀部分。

void readFlight(){ 
    //First Read file with variable curFly 
    FILE * cpt; 
    if((cpt = fopen("flyC.txt", "rb")) == NULL) 
    { 
     printf("ERROR: Flight Count File Could Not Be Opened\n"); 
    } 

    if (1 != fscanf(cpt, "%d", &curFly)){ 
     printf("ERROR: Flight Count File Could Not Be Read\n"); 
    } 

    fclose(cpt); 

    FILE * fpt; 
    if((fpt = fopen("fly.bin", "rb")) == NULL) 
    { 
     printf("ERROR: Flight File Could Not Be Opened/Read\n"); 
    } 

    fread(flyList, sizeof(struct Flight) * curFly, 1, fpt); 

    fclose(fpt); 
} 

任何幫助表示讚賞!

+0

如果您自己查看文件(即在記事本或類似文件中),他們是否有任何內容? (換句話說:是閱讀還是書寫問題?) – tabstop

回答

2

我在這裏看到幾個問題。

  1. 我明白flyC.txt應該包含純ASCII文本而不是二進制數據。如果是這種情況,則不應使用"wb"開放cpt進行寫入,而只需要"w"
  2. 寫入cpt時,請不要關閉它。程序結束時,操作系統可能會關閉它,但不應該依賴於此。
  3. 在讀取文件時,您已經爲flyC.txt做過類似的錯誤;如果它包含二進制數據,則不應使用「rb"打開它,而應僅使用"r"
2

您在寫入功能中忘記了fclose(cpt);

此外,你應該返回錯誤,而不是調用fread/fwrite。

+0

謝謝!它現在像一個魅力工作,我添加了fclose,並使其不會打開文件如果發生錯誤...非常有用和快速 –