プロが教える店舗&オフィスのセキュリティ対策術

-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

A 回答 (2件)

VC++のCRTのファイル記述子の既定最大値はstdin等を含んで512です。


不要ならどんどん閉じてください。

参考URL:http://msdn.microsoft.com/ja-jp/library/kdfaxaay …
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2009/01/29 21:39

>fopenには大量のファイルを読み込むのは向いてないのでしょうか?


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

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

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

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

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

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

お礼日時:2009/01/29 21:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!