是否可以使用fstream.h打开多少文件(实际上)

时间:2016-07-14 15:54:47

标签: c++

澄清:这不是重复因为
  - 打开后我也关闭了文件   - 程序在20-40次迭代后挂起,而不是在另一个问题中所说的几百次

我试图以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";

    }

}

1 个答案:

答案 0 :(得分:1)

问题与打开文件无关。该程序在第28-34行的无限循环中挂起(!成功)。