ファイルポインタ変数宣言と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つのファイルを作製することができます。


いったん閉じられたファイルと


ファイルポインタ変数fpとは関係がなくなるからです


ファイルポインタ変数fpを使ってファイルを作製、開くたびに


その開かれたファイルにアクセスするアドレスが


ファイルポインタ変数fpに格納されます


そうなると


最後に開かれたファイルにしかファイルポインタ変数fpを使ってデータを保存できなくなります


それでは


同じファイルポインタ変数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!なんだ。



#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をつかって

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

この場合ファイルポインタ変数fpには戻り値としてfopen関数に返されたNekoNeko.txtファイルにアクセスするためのメモリのアドレスが

格納されることになります*/


if(fp==NULL){

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

return -1;}

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

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


fclose(fp);

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

同じファイルポインタ変数fpを使用して開かれましたが

ファイルポインタ変数fpにはNekoNeko.txtファイルにアクセスするためのメモリのアドレスが格納されているので

fclose(fp);によって

NekoNeko.txtファイルを閉じることはできても

Nyannta.txtファイルは閉じることはできません。🌞*/

return 0;

}


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


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

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


Visual Studioの場合


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

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



このプログラムのように


Nyannta.txtファイルを


fclose(fp);を行わずに


Nyannta.txtファイルに


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


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


fopen関数の設定


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


が行われる前の


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


Nyannta.txtファイルへアクセスするためのアドレスが


格納されています。



新たにfopen関数の設定


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


により


NekoNeko.txtファイルが


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



戻り値として


fopen関数に返されたNekoNeko.txtファイルへアクセスするためのアドレスが


ファイルポインタ変数fpに格納されることになります


ですので


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


が実行されると


Hello!らんららんworld(改行)が


NekoNeko.txtファイルに


保存されることになります


Nyannta.txtファイルを


fclose(fp);を行わずに閉じなくても


Hello!らんららんworld(改行)が


NekoNeko.txtファイルに


保存されることになるというわけです


🌼   🌼








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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る