- ベストアンサー
ファイル操作についての質問
こんばんは。 C言語でのファイル操作についての質問です。 ファイル(ここでは"sample.txt"とします。)を開き、そのファイルに書かれている内容を表示するプログラムを ・ファイルを開く ・ファイルを読み込み表示する ・ファイルを閉じる の3つの関数にわけて作ろうと思っているのですが、なかなかうまくいきません。 時間があるときでかまいませんので、どうか教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか(見やすくするため全角スペースを使っています) #include <stdio.h> FILE* open(char *fname, char *mode) { return fopen(fname,mode); } void output(FILE* fp) { int c; while ((c=fgetc(fp)) != EOF) { printf("%c",c); } } int close(FILE *fp) { return fclose(fp); } int main(void) { FILE *fp; if ((fp=open("sample.txt","r")) != NULL) { output(fp); close(fp); } return 0; }
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2の補足について 意味が良くわかりませんが、 なんらかの方法で、 open() output() close() の間で、ファイルポインタを受け渡ししてやらないといけません。 それぞれの関数で引数がないので、グローバル変数を使うことになるのでしょうが、 そうすると、それぞれの関数の独立性が失われるので、それぞれの関数を分離しておくコト自体が意味のないことになってしまいます。 ただ、表記上3つの関数にわけるのなら、 ただ、関数名でくくればよいだけのことだと思いますが、 既に述べたように、意味がありません。 もしかして、意図を勘違いしているのかもしれないので、#2の補足のようにする意味を教えていただけますか? もしかして、ファイルポインタでなくファイルディスクリプタとかもっと低レベル関数を使って実現するというような意味なのでしょうか?
補足
「ファイルを開く、読み込んで出力、ファイルを閉じるの3動作を分ける場合、どのようなプログラムになるのだろう。」というのが知りたいだけなんです。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#include <stdio.h> void main(void){ FILE *fp; char buff[128]; fopen("sample.txt","r"); while(NULL!=fgets(buff, 128, fp)) printf("%s",buff); fclose(fp); }
補足
回答ありがとうございます。 この場合、「ファイルを開く」、「ファイルを読み込み出力」、「ファイルを閉じる」が一緒になっていますよね。 これを関数を使って分けたいんです。 open() output() close() という感じで。 よろしくお願いします。
- keyguy
- ベストアンサー率28% (135/469)
#include<iostream> #include<fstream> using namespace std; void main(void) { ifstream ifs; int i; char *pc; ifs.open("sample.txt"); if(ifs.is_open()==0)return; ifs.seekg(0,ios::end); i=ifs.tellg(); ifs.seekg(0,ios::beg); ifs.read(pc=new char[i],i); cout<<pc; ifs.close(); delete[] pc; }
お礼
回答ありがとうございます。 fopenやfcloseなどが見当たらないのは、根本的にやり方が違うからなのでしょうか? 注釈をつけてくれたりすると嬉しいです。
お礼
回答ありがとうございます。 引数の渡し方や、ファイルポインタの渡し方(?)がわからなかったのですが、ようやく理解できました。 ありがとうございます。