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

Is there any restriction on how many files can be opened using fstream.h (practically)

本文关键字:任何限 是否 实际上 文件 多少 fstream 使用      更新时间:2023-10-16

>澄清:这不是重复的,因为
- 我也在打开文件后关闭它们。
- 程序在 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<<"nnIteration "<<i;
        snprintf(a,sizeof(a),"%d",queue[i]);
        out.open(a);
        cout<<"nFile "<<a<<" openedn";
        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<<"nn"<<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<<"nn";
    }
}
该问题与

打开文件无关。程序在第 28-34 行的无限循环中挂起,而 (!success)。