• ベストアンサー

ファイル操作についての質問

こんばんは。 C言語でのファイル操作についての質問です。 ファイル(ここでは"sample.txt"とします。)を開き、そのファイルに書かれている内容を表示するプログラムを ・ファイルを開く ・ファイルを読み込み表示する ・ファイルを閉じる の3つの関数にわけて作ろうと思っているのですが、なかなかうまくいきません。 時間があるときでかまいませんので、どうか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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; }

kaperad
質問者

お礼

回答ありがとうございます。 引数の渡し方や、ファイルポインタの渡し方(?)がわからなかったのですが、ようやく理解できました。 ありがとうございます。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2の補足について 意味が良くわかりませんが、 なんらかの方法で、 open() output() close() の間で、ファイルポインタを受け渡ししてやらないといけません。 それぞれの関数で引数がないので、グローバル変数を使うことになるのでしょうが、 そうすると、それぞれの関数の独立性が失われるので、それぞれの関数を分離しておくコト自体が意味のないことになってしまいます。 ただ、表記上3つの関数にわけるのなら、 ただ、関数名でくくればよいだけのことだと思いますが、 既に述べたように、意味がありません。 もしかして、意図を勘違いしているのかもしれないので、#2の補足のようにする意味を教えていただけますか? もしかして、ファイルポインタでなくファイルディスクリプタとかもっと低レベル関数を使って実現するというような意味なのでしょうか?

kaperad
質問者

補足

「ファイルを開く、読み込んで出力、ファイルを閉じるの3動作を分ける場合、どのようなプログラムになるのだろう。」というのが知りたいだけなんです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#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); }

kaperad
質問者

補足

回答ありがとうございます。 この場合、「ファイルを開く」、「ファイルを読み込み出力」、「ファイルを閉じる」が一緒になっていますよね。 これを関数を使って分けたいんです。 open() output() close() という感じで。 よろしくお願いします。

  • keyguy
  • ベストアンサー率28% (135/469)
回答No.1

#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; }

kaperad
質問者

お礼

回答ありがとうございます。 fopenやfcloseなどが見当たらないのは、根本的にやり方が違うからなのでしょうか? 注釈をつけてくれたりすると嬉しいです。

関連するQ&A