こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

-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

投稿日時 - 2009-01-29 19:48:31

QNo.4671983

すぐに回答ほしいです

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

>fopenには大量のファイルを読み込むのは向いてないのでしょうか?
「ファイルを読み込む」が「ファイルを複数同時に開いておく」であればできません。
処理系にも依存しますが、ある程度のところでファイルオープンに失敗します。
わたしが過去に経験したものでは10程度でNGになりました。

fopen()とfclose()が対になっていませんので、同時にファイルを開く必要がなければ、
fopen()を使用し、処理(読み込み書き込み何でもいいです)が終わったらfclose()で閉じてから、次のファイルを開いてください。

投稿日時 - 2009-01-29 20:04:13

お礼

arainさん、はじめまして
ご回答ありがとうございました。

ファイルを複数同時に開いておくわけではないので
説明不足だった点をお詫び申し上げます。

処理が終わる度にfcloseを用いることで
全てのファイル入力をすることができました。

ありがとうございました。

投稿日時 - 2009-01-29 21:37:52

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

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

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

投稿日時 - 2009-01-29 20:28:51

お礼

dummさん、はじめまして
ご回答ありがとうございました。

まだVC++について知らないことが多すぎるので
これから勉強していきたいと思います。

参考リンク、是非活用させていただきます
ありがとうございました

投稿日時 - 2009-01-29 21:39:20

あなたにオススメの質問