ファイルポインタ変数宣言とfopen関数の設定を2つ行い同時にハードディスク内に2つのファイルを作製してみましょう。

🌻  🌻


ね、ね

では同時にハードディスク内に2つのファイル


Nyannta.txtファイル

NekoNeko.txtファイル

を作製してみようよ。


ただし


先のエピソードと異なり


異なるファイルポインタ変数fp,spを用いてね。



  🌼   🌼




ソーラー「

異なるファイルポインタ変数fp,spを用いてね。


ふん、ふん


それは簡単だね


次のプログラムのように


2つの

ファイルポインタ変数fp,sp


を用いて


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


Nyannta.txtファイル

NekoNeko.txtファイル


が作製できるんじゃないかな?


#pragma warning(disable: 4996)

#include <stdio.h>

int main (void){


FILE *fp;

fp=fopen("Nyannta.txt","w");

if(fp==NULL){

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

return -1;}

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


fputs("Hello!るんるんworld\n",fp);

fclose(fp);



FILE *sp;

sp=fopen("NekoNeko.txt","w");

if(sp==NULL){

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

return -1;}

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

fputs("Hello!るんるるんるんworld\n",sp);


fclose(sp);

return 0;

}


ソーラー「

異なるファイルポインタ変数fp,spを使って


Nyannta.txtファイル

NekoNeko.txtファイル


2つのファイルが同時に作成されるかたのしみだね。


それでは


コンパイルっと」


コンパイル結果

(EAZY IDECの場合)


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

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


(Visual Studioの場合)


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

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


そして

PC内の検索欄にNyannta.txtとうちこんで


PC内を検索してみると・・・


できてる、できてる


Nyanntaファイルが・・・


中身は

Hello!るんるんworld


では


さらに


PC内の検索欄にNekoNeko.txtとうちこんで


PC内を検索してみると・・・


NekoNekoファイルも作製されてる!


中身は

Hello!るんるるんるんworld


となってる



🌻     🌻

実はこの場合


先のエピソードでもみてきたように


ファイルポインタ変数を

fp,spと使い分ける必要はありません。


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


Nyannta.txtファイル

NekoNeko.txtファイル


2つのファイルを作製することができます。


次のプログラムのように、ね。


#pragma warning(disable: 4996)

#include <stdio.h>

int main (void){


FILE *fp;/*ファイルポインタ変数fpがつかわれています。*/

fp=fopen("Nyannta.txt","w");

if(fp==NULL){

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

return -1;}

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


fputs("Hello!らんらんworld\n",fp);

fclose(fp);


FILE *fp;

/*ここでも、ファイルポインタ変数fpがつかわれています。

Visual Studioでは同じ変数名で2度ファイルポインタ変数宣言をおこなうことはできないので先のエピソードでも語られたように

このFILE *fp;

を記述しないでください

*/

fp=fopen("NekoNeko.txt","w");

if(fp==NULL){

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

return -1;}

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

fputs("Hello!らんららんworld\n",fp);


fclose(fp);

return 0;

}


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


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

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


2度目のFILE *fp;を記述しない(Visual Studioの場合)


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

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



ソーラー「どれどれ?


先程と同様に


PC内の検索欄にNyannta.txtとうちこんで


PC内を検索してみると・・・


同じファイルポインタ変数fpをつかってるのに


Nyanntaファイルが作製されて


ファイルの中身には

Hello!らんらんworld


が保存されてる!


さらに


PC内の検索欄にNekoNeko.txtとうちこんで


PC内を検索してみると


NekoNekoファイルも作製されて


中身は

Hello!らんららんworld


が保存されてる!


先のエピソード通りの結果だね。


🌻     🌻


はは


さらに今のプログラムでは

ファイルポインタ変数宣言FILE *fp;


は2回おこなわれていたけど


次のプログラムのように


1回しか行わなくてもOK!なんだ。


異なる2つの


ハードディスク内のファイルをファイルポインタ変数fp


の格納するアドレスのメモリに保存するのに


fpのファイルポインタ変数宣言を


2回も行わなくていいんだね。


#pragma warning(disable: 4996)

#include <stdio.h>

int main (void){


FILE *fp;/*ファイルポインタ変数fpがつかわれています。*/

fp=fopen("Nyannta.txt","w");

if(fp==NULL){

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

return -1;}

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


fputs("Hello!らんらんworld\n",fp);

fclose(fp);


/*🌞ここに記述されていたファイルポインタ変数宣言FILE *fp;は

実は

Visual Studioでなく

EAZY IDECの場合でも必要ありません🌞*/


fp=fopen("NekoNeko.txt","w");

if(fp==NULL){

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

return -1;}

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

fputs("Hello!らんららんworld\n",fp);


fclose(fp);

return 0;

}


さら~に


このとき次のプログラムのように


#pragma warning(disable: 4996)

#include <stdio.h>

int main (void){


FILE *fp;

fp=fopen("Nyannta.txt","w");

if(fp==NULL){

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

return -1;}

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


fputs("Hello!りんりんworld\n",fp);


/*fclose(fp);🌞 ここでNyannta.txtファイルをfclose(fp);を行わないで

ファイルクローズ

つまり

ファイルを閉じずに

Nyannta.txtファイルを開いたままの状態にしてみます

*/


fp=fopen("NekoNeko.txt","w");


/*Nyannta.txtファイルにファイルポインタ変数fpをつかって

データを新規書き込みできる状態にもかかわらず

あらたに

NekoNeko.txtファイルがファイルポインタ変数fpをつかって

データを新規書き込みできるようファイルオープンをおこないます

*/


if(fp==NULL){

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

return -1;}

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

fputs("Hello!らんららんworld\n",fp);


fclose(fp);

/*🌞Nyannta.txtファイルとNekoNeko.txtファイルの2つのファイルは

同じファイルポインタ変数fpを使用しているので

fclose(fp);によって同時に閉じることができます。🌞*/

return 0;

}


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


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

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


Visual Studioの場合


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

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



このプログラムのように


Nyannta.txtファイルを


fclose(fp);を行わずに


Nyannta.txtファイルに


ファイルポインタ変数fpをつかってデータが新規書き込みできる


ファイルが開いたままの状態にしたとしましょう。


fopen関数の設定


fp=fopen("NekoNeko.txt","w");


が行われる前の


ファイルポインタ変数fpには


fputs("Hello!りんりんworld\n",fp);


により


Nyannta.txtファイルへ保存する文字列データ


"Hello!りんりんworld\n"



格納したメモリのアドレスが


格納されています。


メモリには


文字列データ"Hello!りんりんworld\n"が格納されたままとなっています。


//文字列データ"Hello!りんりんworld"でなく


文字列データ"Hello!りんりんworld\n"が格納されたままとなっています。


つまり改行の働きをするエスケープシーケンス\nも文字列データとして


格納されているわけです//



このとき



新たにfopen関数の設定


fp=fopen("NekoNeko.txt","w");


により


NekoNeko.txtファイルが


ファイルに新規書き込みできるオープンモード"w"で開かれたとします



そして

fputs("Hello!らんららんworld\n",fp);


が実行されると


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


メモリに


文字列データ


"Hello!らんららんworld\n"


が新たにかきこまれます。


すると


その


文字列データ


"Hello!らんららんworld\n"

一番最後の


ファイルオープンの設定


fp=fopen("NekoNeko.txt","w");


によって作製され開かれることになったNekoNeko.txtファイルに


格納されます


つまり


fopen関数の設定

fp=fopen("Nyannta.txt","w");

がおこなわれ


ファイルポインタ変数fpを用いてNyannta.txtファイルにデータが


新規書き込みできるように


Nyannta.txtファイルファイルがひらかれたあとに


fopen関数の設定

fp=fopen("NekoNeko.txt","w");

が実行されて


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


NekoNeko.txtファイルにデータが


新規書き込みできるように


NekoNeko.txtファイルがひらかれた場合は


Nyannta.txtファイルには


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


新規書き込みできないよう設定されています


ですので


fclose(fp);


をおこない


Nyannta.txtファイルを閉じなくても


NekoNeko.txtファイルにデータは保存されるんだね。


これは先のエピソードの答えでもあるかな。


🌻



このとき


ポインタ変数一般の性質により


(ポインタ変数を使えばポインタ変数名を変更することなく


どんどんメモリにデータを格納することができます


それらのデータは互いに


上書きなどされず、それぞれ別のメモリへと格納されます)


ファイルポインタ変数fpによって


メモリに保存された


文字列データ"Hello!りんりんworld\n"は


上書きされることなく保存されたまま


ファイルポインタ変数fpによって


文字列データ


"Hello!らんららんworld\n"


が別のメモリに保存されることになります。







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

作者を応援しよう!

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

応援したユーザー

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