実はハードディスク内のファイルにデータを保存することとfclose関数をつかってファイルを閉じることは関係ありません。

fprintf関数によってデータをハードディスク内のファイルへ保存することと fclose関数によってファイルを閉じることは関係ありません

🌻  さ、次はどんなお話へとつづいていくのかな。



ソーラー 「このエピソードではタイトルの


fprintf関数によってデータをハードディスク内のファイルへ保存することと fclose関数によってファイルを閉じることは関係ありません


について学んでみようかな~


なあんて」



🌻ソーラーさん ファイルを閉じないということは


ファイルを開いた後


ファイルを閉じる命令文

fclose(fp);


を実行しないということなんだね。


つまり


fclose(fp);


を実行して


ファイルを閉じないので


ファイルポインタ変数fpをもちいてハードディスクのファイルに


アクセス可能な状態のままにするというわけなんだね



それでもハードディスク内のファイルにデータは保存できるんだ。

                    🌻


ソーラー 「そうなんです。


ハードディスク内のファイルを開き


fprintf関数によって


ファイル構造体を通して


メモリに


保存したいデータが格納されると


ハードディスク内のファイルへのデータ保存は


すぐにおこなわれます。」





🌻せっかちさんだ~🌼




ソーラー「では実際に


fprintf関数を使って


ハードディスク内のTEN-GOGO-C-language.txtファイルに


数値データを書き込んでみます。


もちろん


fclose(fp);


をおこないファイルを閉じるようなことはしません


fprintf関数を使って


ハードディスク内のTEN-GOGO-C-language.txtファイルにデータを


保存する前に


まずはハードディスク内のTEN-GOGO-C-language.txtファイルを


まっさらで何もデータが格納されていない状態にしようかな



まずは


次のプログラムを実行して


TEN-GOGO-C-language.txtファイルを


まっさら~


何もデータが保存されていない状態にしてみます。




#pragma warning(disable: 4996)

#include <stdio.h>

int main (void){


FILE *fp;

fp=fopen("TEN-GOGO-C-language.txt","w");

if(fp==NULL){

printf("ファイルオープンに失敗しましたよ~ん\n");

return -1;}

else printf("Hello!ファイルオープンに成功しましたよ~ん\n");


fclose(fp);

return 0;

}


コンパイル結果


Hello!ファイルオープンに成功しましたよ~ん


ソーラー「PC内検索でTEN-GOGO-C-language.txtファイル


の中身を調べてみると


まっさらな白地の空白になっています。


オープンモード"w"でファイルを開いて閉じると


ファイル内に保存されていたデータはすべて消去されるんだったね。


これで準備完了~🌞


そして次に

そのまっさらな

TEN-GOGO-C-language.txtファイルに


fprintf関数を使って


数値


1

2

3

4

5


を保存してみます。



そのプログラムは次のようになります。


#pragma warning(disable: 4996)

#include <stdio.h>

int main (void){


FILE *fp;

fp=fopen("TEN-GOGO-C-language.txt","w+");

if(fp==NULL){

printf("ファイルオープンに失敗しましたよ~ん\n");

return -1;}

else printf("Hello!ファイルオープンに成功しましたよ~ん\n");


fprintf(fp,"%d\n",1);

fprintf(fp,"%d\n",2);

fprintf(fp,"%d\n",3);

fprintf(fp,"%d\n",4);

fprintf(fp,"%d\n",5);


/*ここではfclose(fp); はおこないません*/

return 0;

}


ソーラー「さあ、このプログラムを実行してみると・・・」



コンパイル結果


Hello!ファイルオープンに成功しましたよ~ん



ソーラー「そして


PC内検索でTEN-GOGO-C-language.txtファイル


を探し出して中身を調べてみると・・


1

2

3

4

5


🌻

fclose(fp);

をおこなわなくても


ちゃんと


データが保存されてる😊

🌻



ソーラー「ちゃんとfprintf関数を使って


TEN-GOGO-C-language.txtファイルに

1

2

3

4

5

保存することができました。


このとき


プログラムの最後で


ファイルをクローズする

命令文

fclose(fp);


をおこないませんでした。


ですが


ハードディスク内のTEN-GOGO-C-language.txtファイルに


ちゃんと


数値

1

2

3

4

5


が保存されましたね🌞


このように


fclose(fp);

を行い

ファイルを閉じることと


ファイルにデータを保存することとは関係ありません


ファイル構造体をとおして


メモリに

数値データ

1

2

3

4

5

が格納された時点で


ハードディスク内のTEN-GOGO-C-language.txtファイルに


数値データ

1

2

3

4

5


は保存されています


その後


fclose(fp);


が行われて


ハードディスク内のTEN-GOGO-C-language.txtファイルに


アクセスできない状態となるわけです。




  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます