2010-12-03 46 views
1

我一直在想這個。我讀過許多書顯示:當您打開一個文件,並且您發現該文件不存在,你應該有當時沒有這樣的文件退出系統把一個錯誤...C打開文件時編程fopen()

FILE *stream = NULL; 
stream = fopen("student.txt", "rt"); 
if (stream==NULL) { 
    printf(「Cannot open input file\n」); 
    exit(1); 
else {printf("\nReading the student list directory. Wait a moment please..."); 

但我認爲而不是這樣做..爲什麼不自動創建一個新的,當你發現你打開的文件不存在。即使您不會在使用該程序時在文件上寫入文件(但會在下次使用該文件時)。我不確定這是否有效。我只是新來的,沒有任何編程經驗,所以我問你的意見是什麼是創建文件試圖打開它的優點和缺點,而不是退出系統通常在書籍上的示例。

FILE *stream = NULL; 
stream = fopen("student.txt", "rt"); 
    if (stream == NULL) stream = fopen("student.txt", "wt"); 
    else { 
      printf("\nReading the student list directory. Wait a moment please..."); 

您的意見將不勝感激。謝謝。

+1

他們實際上想要學習的是錯誤處理。如果開始時你會編寫只在「高興」情況下才能正常工作的程序,隨着時間的推移,你將不得不學會在出現錯誤時做出正確的決定。請檢查此問題:http://stackoverflow.com/q/4302748/395626 – ruslik 2010-12-03 02:04:41

回答

8

因爲從您的示例,它似乎是一個輸入文件,如果它不存在,沒有創建它的點。

例如,如果程序應該打開一個文件,然後計算其中有多少元音,那麼如果文件不存在,我就沒有多少意思了。

我的價值0.02美元。

2

如果你的程序期望一個文件存在而它不存在,那麼自己創建一個文件就沒什麼意義了,因爲它將是空的。

如果OTOH,你的程序沒問題,並且知道如何從頭開始填充一個文件,那麼這樣做很好。

只要它對你的程序有意義,任何一種都可以。這裏不要擔心效率 - 這是微不足道的。首先擔心正確性。

5

參數模式:

``r'' Open text file for reading. 
``r+'' Open for reading and writing. 
``w'' Truncate file to zero length or create text file for writing. 
``w+'' Open for reading and writing. The file is created if it does not 
     exist, otherwise it is truncated. 
``a'' Open for writing. The file is created if it does not exist. 
``a+'' Open for reading and writing. The file is created if it does not 
     exist. 

你的問題是一個簡單的例子。閱讀上面的描述,當你調用fopen()時,你應該決定使用哪種模式。請考慮爲什麼沒有爲「r」和「r +」創建文件,以及爲什麼文件被截斷爲「w」和「w +」等。所有這些都是合理的設計。

1

您可能沒有權限創建/寫入用戶選擇的目錄中的文件。您將必須處理該錯誤狀況。