明確化:
- これを開くとファイルも閉じます。
- プログラムが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";
}
}
2000個のファイルはかなり大きい番号です。はい、これにより問題が発生します。 –
あなたがLinuxで作業している場合は、答え[ここ](http://unix.stackexchange.com/questions/36841/why-is-number-of-open-files-limited-in-linux/36842#)を参照してください。 36842)してください。 –
誰でもFILES = 20 BUFFERS = 30をDOS時代から記憶しています:) – lorro