2010-12-03 8 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

答えて

8

からが入力ファイルのように見えますが、存在しない場合は作成していないようです。

例えば、プログラムがファイルを開くと仮定した場合、その中にいくつの母音が含まれているかを数えれば、ファイルが存在しない場合はそれほど意味がありません。

$ 0.02という価値があります。

2

あなたのプログラムがファイルを存在させようとしていて、それを期待していない場合は、自分自身を作成することはあまり意味がありません。

OTOHの場合、あなたのプログラムは存在しないファイルでOKであり、ゼロからファイルを作成する方法を知っています。

あなたのプログラムにとって理にかなっている限り、どちらでも問題ありません。ここで効率を心配する必要はありません。それはごくわずかです。まず正確さを心配してください。

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

ユーザーが選択したディレクトリのファイルを作成または書き込む権限がない場合があります。そのエラー状態を処理する必要があります。

関連する問題