👇実はハードディスク内のファイルを開くのにどのようなファイルポインタ変数を用いても構いません。

実はハードディスク内のファイルを開くのにfp,rp,spなど自由にどのようなファイルポインタ変数名を用いても構いません。なぜなら・・・

🌻  🌻


さてさて!


それならば


下のプログラムが実行されたなら


#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,"Hello!world\n");


fclose(fp);


return 0;

}


コンパイル結果


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



ソーラー「コンパイル結果


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


より


TEN-GOGO-C-language.txtファイルがハードディスク内に作製され


さらに


オープンモード"w"で


TEN-GOGO-C-language.txtファイルが無事にオープンされている


つまり


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


書き込みできる状態になっていることが確認できました。


そして


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


fprintf(fp,"Hello!world\n");


により


Hello!worldが保存されました


ここまでは もう簡単だね。」


🌻  🌻


このとき


FILE *fp;

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


のように


ファイルポインタ変数名を必ずfpにする必要はなく


rpでも


spでも


よいことになるのです


なぜなら・・・


ファイルポインタ変数宣言とfopen関数の設定


FILE *fp;

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


がおこなわれて


fprintf(fp,"Hello!world\n");


によって


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


文字列Hello!worldが保存されるとき


ファイルポインタ変数fpを用いて


メモリに文字列データが格納されることになりますが


どのメモリに格納されても


ハードディスクのファイルに


データは保存されるという仕組みになっているから


なんですね


つまり


文字列をどのメモリに格納してから


ハードディスクのファイルに保存してもよい


というのは


ふつうにコンピュータでおこなわれていることかな


どのメモリを利用して


作業をおこなってもよいということですからね


ファイルポインタ変数fpをもちいても


ファイルポインタ変数rpをもちいても


メモリにデータが格納されされればよいというわけなんです


🌼  🌼


ソーラー「なあるほど😊


そんな仕組みなんだね」


🌻  🌻



今の状態は


ハードディスクの


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


文字列Hello!worldが格納された後


fclose(fp);


により


TEN-GOGO-C-language.txtファイルは閉じられています


再び TEN-GOGO-C-language.txtファイルを開き


データを追加したいのですが


その場合


TEN-GOGO-C-language.txtファイルを作製するときに使われた


FILE *fp;の

ファイルポインタ変数fp


TEN-GOGO-C-language.txtファイルを作製するときに


fopen関数の第1引数に記述されていた


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


以下のソースコードのように再び

👇

ファイルポインタ変数宣言とfopen関数の設定に


もちいればよいのですね。


FILE *fp;

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


TEN-GOGO-C-language.txtファイルにデータを追加するので


オープンモード"a"で


TEN-GOGO-C-language.txtファイルをひらきます


🌻 🌻 🌻


ですが


ここで どうしよっかな~


ファイルポインタ変数fpの代わりに

ファイルポインタ変数rpを記述したらどうなるかな?


試してみる?


🌼


ソーラー「ああっ


さきにいわれたっ」



🌻


そのためにまず

ファイルポインタ変数宣言とfopen関数の設定


FILE *fp;

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



ハードディスク内に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");


fprintf(fp,"理想郷の太陽の園\n");

/*fputs関数の代わりにfprintf関数をもちいました*/


fclose(fp);

return 0;

}


コンパイル結果


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


ソーラー「まず


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


ファイルポインタ変数fpをもちいて


文字列データ


🌞理想郷の太陽の園🌞


を保存してみるんだね」




🌼🌼

🌞理想郷の太陽の園🌞


それは

今ここにいる場所・・・

🌼🌼



ソーラー

「そして


次は


fpとは別のファイルポインタ変数rpを用いて


ファイルポインタ変数宣言とfopen関数の設定


FILE *rp;

rp=fopen("TEN-GOGO-C-language.txt","a");


を行い


TEN-GOGO-C-language.txtファイルをオープンモード"a"


で開き


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


fprintf関数を使って


新たにデータ


例えば


文字列データ


🌞理想郷の中心近くに住まう者🌞


がかきこめるかどうかを試してみようというわけなんでしょう?」



🌻


くすくす ふっ


ふふふ


理想郷の中心近くに住まう者~



が、かきこめるかどうかを試してみようと


その通りです😊(*´▽`*)😝



🌻  🌻  🌻



ソーラー「まずはハードディスク内の


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


文字列データ


🌞理想郷の太陽の園🌞


が保存されているか確かめてみるかな」


PC内のデータ検索欄から


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


を探して確認してみると


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


文字列データ


🌞理想郷の太陽の園🌞


が保存されている。


ソーラー「ここまで順調だね


では


今度は


ファイルポインタ変数fpでなく


別のファイルポインタ変数rpを用いて


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


文字列データ


🌞理想郷の中心近くに住まう者🌞


が保存できるか試してみるよ


そのプログラムは


次のようになるね。


TEN-GOGO-C-language.txtファイルにデータを追加して保存するので


オープンモードは"w"から"a"に


変えないとね。


#pragma warning(disable: 4996)

#include <stdio.h>

int main (void){


FILE *rp;

rp=fopen("TEN-GOGO-C-language.txt","a");

if(rp==NULL){

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

return -1;}

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


fprintf(rp,"理想郷の中心近くに住まう者\n");

/*fputs関数の代わりにfprintf関数をもちいました*/


fclose(rp);

return 0;

}



コンパイル結果(EAZY IDECの場合)

ビルド結果(Visual Studio)の場合


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


ソーラー「さてさて


ファイルポインタ変数をfpからrpに変更したけど


文字列データ


🌞理想郷の中心近くに住まう者🌞


は ちゃんと


TEN-GOGO-C-language.txtファイルに保存されてるかな(´▽`*)


TEN-GOGO-C-language.txtファイルを調べてみると・・・


ソーラー「保存されてるデータは


理想郷の太陽の園

理想郷の中心近くに住まう者


ファイルポインタ変数をfpからrpに変更したけど


ちゃんと保存されてる!!!」




🌻     🌻 


ハードディスク内のファイルに


オープンモード"w"で


データを格納するとき


それらのデータは


ファイルポインタ変数fpをもちいてメモリに


1時的に格納されました



今のプログラムのように


ファイルポインタ変数宣言とfopen関数の設定を


次のようにおこなって


ファイルポインタ変数名をrpにかえたとします


FILE *rp;

rp=fopen("TEN-GOGO-C-language.txt","a");



オープンモード"a"


でTEN-GOGO-C-language.txtファイルを開こうというわけです


このとき


以前使われた


ファイルポインタ変数fpでなく


ファイルポインタ変数rpでも


ハードディスクのTEN-GOGO-C-language.txtファイルを開くことができ


fprintf関数によって


文字列データを追加して


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


保存することができます


この場合は


ファイルポインタ変数rpをもちいて


メモリに文字列データは格納されます。


そののち


メモリに


格納されたそれらのデータは


ハードディスクのTEN-GOGO-C-language.txtファイルに保存されます


このように


TEN-GOGO-C-language.txtファイルに文字列データを保存するのに


2つのファイルポインタ変数


ファイルポインタ変数fp

ファイルポインタ変数rp


がつかわれたわけですが


ファイルポインタ変数fp

ファイルポインタ変数rp


どちらをもちいても


まず


メモリに文字列データが格納されます


どのメモリに文字列データが格納されても


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


データは保存されることになります


ですので


それらの文字列データは


ファイルポインタ変数fpをつかってメモリに格納されても


ファイルポインタ変数rpを使ってメモリに格納されても


どちらでもよいということになります。


よって


ファイルポインタ変数fpをつかって


TEN-GOGO-C-language.txtファイルに文字列データを


保存した後に


再びオープンモード"a"で


TEN-GOGO-C-language.txtファイルを開いて文字列データを


保存する際




ファイルポインタ変数fpでなく


ファイルポインタ変数rpをもちいても


TEN-GOGO-C-language.txtファイルに文字列データを


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


🌻


ソーラー「つまり


ファイルポインタ変数宣言とfopen関数の設定


FILE *rp;

rp=fopen("TEN-GOGO-C-language.txt","a");


がおこなわれて


fprintf関数によって


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


文字列データが追加して格納されるとき


ファイルポインタ変数rpを用いて


メモリに文字列データが格納されることになりますが


どのメモリに格納されてもハードディスクのファイルに


データは追加して保存されることになります


だから


ファイルポインタ変数fp

でなくて

ファイルポインタ変数rp

でもいいというわけなんだね。


それは


メモリに


変数宣言


int a;


を行い


int型の変数aを作製して


変数aをつかってデータが格納されても


メモリに


変数宣言


int b;


を行い


int型の変数bを作製して


変数bをつかってデータが格納されても


とにかく


データがメモリに格納されればよい


ので


変数aをもちいても


変数bを用いてもよい


ということと一緒なんだね。」


🌻  🌻


メモリに格納された文字列データを利用して


ファイルに文字列を保存するのだけど


それらの文字列データを格納するメモリの位置は


関係ないということなんです


🌼  🌼

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

作者を応援しよう!

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

応援したユーザー

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