2016-07-14 8 views
1

明確化:
- これを開くとファイルも閉じます。
- プログラムが20〜40回繰り返された後にハングします。他の質問で言われたように数百ではありません。fstream.hを使用していくつのファイルを開くことができるか(実質的に)

簡単なパズルを2000個のファイル形式で作成しようとしました。私は詳細に入る必要はありませんが、基本的には2000のファイルを開いたり閉じたりするループが必要でした。しかし、20から40回の反復の後、プログラムは予期せずぶら下がりを開始し、再開したり、エラーを出したりしません。プログラムの構文を調べて、それ以外はうまく見えるので、C++はそのような問題をサポートしていません多数のファイル?

コード:

#include<iostream> 
#include<fstream> 
#include<stdlib.h> 
#include<time.h> 

using namespace std; 

int main() 
{ 
    ofstream out; 
    char a[4]; 
    int i,j,k,n,no[5],queue[2000],q=1; //n = no of nos, q=first free index in queue 
    queue[0]=1; 
    bool successful; 
    srand(time(NULL)); 

    for(i=0;i<2000;++i) 
    { 
     cout<<"\n\nIteration "<<i; 
     snprintf(a,sizeof(a),"%d",queue[i]); 
     out.open(a); 
     cout<<"\nFile "<<a<<" opened\n"; 
     n=rand()%4+2; 
     cout<<n<<" random nos to be generated"; 
     for(j=0;j<n;++j) 
     { 
      no[j]=rand()%2000+1; 
      do 
      { 
       successful=true; 
       for(k=0;k<i;++k) 
        if(queue[k]==no[j]) 
         successful=false; 
      } while (!successful); 
     } 
     cout<<"\nNos selected "; 
     for(j=0;j<n;++j) 
      cout<<no[j]<<" "; 
     for(j=0;j<n;++j) 
      out<<no[j]<<"\n"; 
     cout<<"\nWritten to file"; 
     out.close(); 
     out.open("logs", ios::app); 
     cout<<"\nLogs opened"; 
     out<<"\n\n"<<i<<"\n "; 
     for(j=0;j<n;++j) 
      out<<no[j]<<"\n "; 
     out.close(); 
     cout<<"\nLog entry made"; 

     for(j=0;j<n;++j) 
      queue[q+j]=no[j]; 
     q+=n; 
     cout<<"\nAppended to queue, new queue length: "<<q<<"\n\n"; 

    } 

} 
+0

2000個のファイルはかなり大きい番号です。はい、これにより問題が発生します。 –

+0

あなたがLinuxで作業している場合は、答え[ここ](http://unix.stackexchange.com/questions/36841/why-is-number-of-open-files-limited-in-linux/36842#)を参照してください。 36842)してください。 –

+1

誰でもFILES = 20 BUFFERS = 30をDOS時代から記憶しています:) – lorro

答えて

1

問題は、ファイルを開くとは何の関係もありません。プログラムは28〜34行目に無限ループで停止しています(!成功しました)。

+0

Tysm!それは私にとってはむしろばかばかしいものでした。とにかく編集しました。今はabt 550の反復まで実行されます。これで十分です。 –

関連する問題