👇実はハードディスク内のファイルを開くのにどのようなファイルポインタ変数を用いても構いません。
実はハードディスク内のファイルを開くのに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が保存されました
ここまでは もう簡単だね。」
🌻 🌻
このとき
ファイルポインタ変数宣言とfopen関数の設定
において
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を用いてもよい
ということと一緒なんだね。」
🌻 🌻
メモリに格納された文字列データを利用して
ファイルに文字列を保存するのだけど
それらの文字列データを格納するメモリの位置は
関係ないということなんです
🌼 🌼
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます