• ベストアンサー

大量のファイルの読み込みについて

-512.txt~512.txtのファイルを順に読み込むプログラムを 作っています。 以下のコードのように作って動かしてみたのですが, -512から-3.txtまで入力してくれるのですが -2.txtの所でエラーが起きてしまいます. ファイルは確実に存在するのですが… fopenには大量のファイルを読み込むのは向いてないのでしょうか? 他に良い方法があれば教えて頂けると幸いです. 宜しくお願いします #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; int i=0; char s[256]; char filename[256]; //ファイル名編集 for(i=-512;i<512;i++){ fp=NULL; sprintf(filename,"distance\\routing_a\\%d.txt",i); printf("%sを読み込みます\n",filename); /* ここで、ファイルポインタを取得する */ if ((fp = fopen(filename, "r")) == NULL) { printf("%s file open error!!\n",filename); exit(EXIT_FAILURE); /* (3)エラーの場合は通常、異常終了する */ } } fclose(fp); /* (5)ファイルのクローズ */ return 0; } 環境 OS:windows XP 開発環境 visual studio 2008

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

  • ベストアンサー
  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

>fopenには大量のファイルを読み込むのは向いてないのでしょうか? 「ファイルを読み込む」が「ファイルを複数同時に開いておく」であればできません。 処理系にも依存しますが、ある程度のところでファイルオープンに失敗します。 わたしが過去に経験したものでは10程度でNGになりました。 fopen()とfclose()が対になっていませんので、同時にファイルを開く必要がなければ、 fopen()を使用し、処理(読み込み書き込み何でもいいです)が終わったらfclose()で閉じてから、次のファイルを開いてください。

daisuke30
質問者

お礼

arainさん、はじめまして ご回答ありがとうございました。 ファイルを複数同時に開いておくわけではないので 説明不足だった点をお詫び申し上げます。 処理が終わる度にfcloseを用いることで 全てのファイル入力をすることができました。 ありがとうございました。

その他の回答 (1)

noname#208124
noname#208124
回答No.2

VC++のCRTのファイル記述子の既定最大値はstdin等を含んで512です。 不要ならどんどん閉じてください。

参考URL:
http://msdn.microsoft.com/ja-jp/library/kdfaxaay(VS.80).aspx
daisuke30
質問者

お礼

dummさん、はじめまして ご回答ありがとうございました。 まだVC++について知らないことが多すぎるので これから勉強していきたいと思います。 参考リンク、是非活用させていただきます ありがとうございました

関連するQ&A