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