cant create new files after some created in a loop
<p>re-formuling the question, I have this code that reads the names of 2500 files in a folder and then read them one by one and extract specific information from them to write that info in new files, the problem is that after extracting the info of exactly 533 files it doesnt open the next ones, the extrae function tells me by logs that the files cant be opened, but i make sure that every time a file has opened i close it after i extract this info i need, so i dont know why it doesnt allow me to read the files after the 533 files read,help plz </p>

<p>this is my function that extract the info</p>

<pre><code>enter code here

std::vector&lt;Cliente&gt; Extraccion::extrae(std::string path, std::vector&lt;Journal&gt; conjunto, std::vector&lt;BanderaEnvio&gt; envios, std::vector&lt;CFD&gt; cfd, std::vector&lt;TIM&gt; tim, std::vector&lt;CentroReparto&gt; lista, std::vector&lt;DomiciliacionS702&gt; domis, std::vector&lt;CargosEnAclaracion&gt; cargos, std::vector&lt;CaracImpresion&gt; impresion) 
{   
        std::vector&lt;Cliente&gt; clientesF;
        std::vector&lt;Encabezado&gt; encabezados;
        clientesF.clear();
        encabezados.clear();
        Cliente *nuevoCliente = new Cliente();      
        int i = 0;
        std::string bin = "";
        int r =0;           
        int countCli=0;     
        long tmaline;
        bool bwrite = true;
        std::string canal = "";
        std::string msglog = "";
        int ctesOmitidos = 0;
        int openFile = 0;         
        std::string linea = "";
        std::fstream file;      
        std::cout&lt;&lt;"---Extrae el Archivo "&lt;&lt;path&lt;&lt;std::endl;
        file.open(path.c_str(), ios::in);
        if (file.good())
        {       
            // //std::cout&lt;&lt;"____________________entra a leer archivo______________________"&lt;&lt;std::endl&lt;&lt;std::endl;
            while(!file.eof())
            {                   
                /*lee la longitud de la linea */
                std::getline(file,linea);
                i++;
                // std::cout&lt;&lt;"LINEA "&lt;&lt;i&lt;&lt;std::endl;
                tmaline = linea.length();               
                canal = linea.substr(0, 3);             
                /*Metemos la Cabecera(canales con HD al inicio), donde viene el num de cliente y su producto */
                if(linea.substr(0, 2) == "HD")
                {
                    Encabezado cab(linea.substr(3,6),util.trim(linea.substr(66,30)));//new Encabezado(linea.substr(3,6),util.trim(linea.substr(66,30))); //.util.trim()
                    encabezados.push_back(cab);                     
                    // //std::cout&lt;&lt;"AQUI ESTA EL PRODUCTO :  "&lt;&lt;cab.getProducto()&lt;&lt;std::endl;
                    // //std::cout&lt;&lt;util.trim(linea.substr(66,30)); //cab.producto;
                }
                else
                {
                    //cout&lt;&lt;"---------no hay encabezados---------"&lt;&lt;std::endl&lt;&lt;std::endl;
                    if (canal == "BH1") 
                    {
                        //case 1/*"BH1"*/:
                        if(nuevoCliente-&gt;strCliente.numCta != "0")
                        {                                   
                            if (bwrite  == true)
                            {           
                                if(nuevoCliente-&gt;strCliente.saldoEPP=="")
                                    nuevoCliente-&gt;strCliente.saldoEPP="[0.00]";

                                if(nuevoCliente-&gt;strCliente.saldoPromCompr=="")
                                    nuevoCliente-&gt;strCliente.saldoPromCompr="0.00";

                                if(nuevoCliente-&gt;strCliente.saldoPromDispo=="")
                                    nuevoCliente-&gt;strCliente.saldoPromDispo="0.00";

                                if(nuevoCliente-&gt;strCliente.saldoProm=="")
                                    nuevoCliente-&gt;strCliente.saldoProm="0.00";

                                if(nuevoCliente-&gt;strCliente.saldoPromDispMax=="")
                                    nuevoCliente-&gt;strCliente.saldoPromDispMax="0.00";                                   
                                clientesF.push_back(*nuevoCliente);                                         
                            }
                            else
                            {
                                // //std::cout&lt;&lt;"Falso para: "&lt;&lt;nuevoCliente-&gt;strCliente.numCta&lt;&lt;"|"&lt;&lt;nuevoCliente-&gt;strCliente.numtargta&lt;&lt;std::endl;
                                countCli--;
                                ctesOmitidos++;
                            }
                            nuevoCliente = new Cliente();
                            nuevoCliente-&gt;strCliente.numCta = "0";
                            msglog = "";
                            bwrite = true;
                            //nuevoCliente = new Cliente(); 
                        }

                        if(tmaline &gt;= 1308) 
                        {
                            ++countCli; 
                            nuevoCliente-&gt;strCliente.numCta = linea.substr(9,19);                               //NUMERO DE CUENTA
                            nuevoCliente-&gt;strCliente.numCliente = linea.substr(47,19);                          //NUMERO DE CLIENTE
                            bin=linea.substr(12, 6);
                            nuevoCliente-&gt;strCliente.jobOrigen = getProdJob(getNombreENTR(path),encabezados[0].getProducto().substr(0, 8));   //.get(0).getProducto().substr(0,8));
                            nuevoCliente-&gt;strCliente.numCta = linea.substr(9,19);                               //NUMERO DE CUENTA
                            nuevoCliente-&gt;strCliente.numtargta = linea.substr(28,19);                           
                            nuevoCliente-&gt;strCliente.domiciliacion = getDomiciliacion(domis, nuevoCliente-&gt;strCliente.numtargta);           //DOMICILIACION
                            nuevoCliente-&gt;strCliente.cargosEnAclaracion=getCargo(cargos, nuevoCliente-&gt;strCliente.numCta+nuevoCliente-&gt;strCliente.numtargta);       //CARGOS ACLARACION
                            nuevoCliente-&gt;strCliente.numCliente = linea.substr(47,19);                          //NUMERO DE CLIENTE
                            nuevoCliente-&gt;strCliente.numContra = " ";                                               //NUMERO DE CONTRATO
                            nuevoCliente-&gt;strCliente.bandEnvio = linea.substr(867,1);                       //BANDERA ENVIO
                            nuevoCliente-&gt;strCliente.codBar = getCodigoBarras(conjunto,linea.substr(28,19));    //NUMERO DE TARJETA regresa CODIGO BARRAS
                            nuevoCliente-&gt;strCliente.medEnvio = getBandEnvio(envios,linea.substr(867,1));   //BANDERA regresa MEDIO ENVIO
                            nuevoCliente-&gt;strCliente.numProd = linea.substr(3,6);
                            nuevoCliente-&gt;strCliente.nomProd = getProducto(encabezados,linea.substr(3,6));  //NUM PRODUCTO regresa NOMBRE PRODUCTO
                            nuevoCliente-&gt;strCliente.fechaAper = completaFechaAp(linea.substr(981,6));      //FECHA APERTURA
                            nuevoCliente-&gt;strCliente.saldoActCorte = convierteCifras(linea.substr(206,12)); //SALDO ACTUAL AL CORTE
                            nuevoCliente-&gt;strCliente.saldoTotalCorte = convierteCifras(linea.substr(1296,12));//SALDO TOTAL AL CORTE
                            nuevoCliente-&gt;strCliente.mesesVencidos = linea.substr(739,1);                    //MESES VENCIDOS
                            nuevoCliente-&gt;strCliente.fechaLimite = completaFechaAp(linea.substr(230,6));        //FECHA LIMITE
                            nuevoCliente-&gt;strCliente.fechaCorte = completaFechaAp(linea.substr(224,6));     //FECHA CORTE
                            nuevoCliente-&gt;strCliente.fechaCorteArch = encabezados[0].getProducto().substr(0,4)+encabezados[0].getProducto().substr(6,2);//"FECHA";//getFechaArch(path);                     //FECHA CORTE ARCHIVO
                            nuevoCliente-&gt;strCliente.nombre = util.trim(linea.substr(486,40));//.util.trim();                   //NOMBRE
                            nuevoCliente-&gt;strCliente.cp = util.trim(linea.substr(726,12));//.util.trim();                       //CODIGO POSTAL
                            nuevoCliente-&gt;strCliente.cr = getCentroReparto(lista, nuevoCliente-&gt;strCliente.cp);
                            nuevoCliente-&gt;strCliente.dir1 = util.trim(linea.substr(526,40));//.util.trim();                     //{
                            nuevoCliente-&gt;strCliente.dir2 = util.trim(linea.substr(566,40));//.util.trim();                             
                            nuevoCliente-&gt;strCliente.dir3 = util.trim(linea.substr(606,40));//.util.trim();                     //DIRECCION
                            nuevoCliente-&gt;strCliente.dir4 = util.trim(linea.substr(646,40));//.util.trim();
                            nuevoCliente-&gt;strCliente.dir5 = util.trim(linea.substr(686,40));//.util.trim();                     //}
                            nuevoCliente-&gt;strCliente.altBlockCode = linea.substr(869,1);                        //ALT BLOCK CODE
                            nuevoCliente-&gt;strCliente.blockCode = linea.substr(868,1);                       //BLOCK CODE
                            nuevoCliente-&gt;strCliente.uuID =getUId(cfd, tim,nuevoCliente-&gt;strCliente.numCta.substr(3,16));               //UUID
                            nuevoCliente-&gt;strCliente.tipo = isNuevo(nuevoCliente-&gt;strCliente.fechaAper, nuevoCliente-&gt;strCliente.fechaCorte, 30);   
                        }
                        else
                        {
                            if (tmaline &gt;= 66)  
                            {
                                    nuevoCliente-&gt;strCliente.numCliente = linea.substr(47,19);
                                    nuevoCliente-&gt;strCliente.numCta = linea.substr(9,19);
                            }else
                            {
                                    nuevoCliente-&gt;strCliente.numCliente = "No Identificado";
                                    nuevoCliente-&gt;strCliente.numCta = "XX";
                            }
                            bwrite  = false;
                            msglog = msglog + "Canal BH1 Linea " + std::to_string(i)+"; ";                  
                        }               
                    } /*Fin if Canal BH1*/                  
                    else if (canal == "BH2")
                    {
                        /*Lectura Canal BH2*/
                        if (tmaline &gt;= 781) 
                        {
                             std::string plan = linea.substr(79,5);                 //PLAN
                             int p = atoi(plan.c_str());//integer.parseInt(plan);
                             if(p&gt;=90000 &amp;&amp; p&lt;=91200)
                             {  // [90000,91200]    
                                std::string saldo = convierteCifras(linea.substr(769,12));
                                nuevoCliente-&gt;strCliente.saldoEPP+="["+saldo+"]";
                                //cout&lt;&lt;" BH2 saldoEPP: "&lt;&lt;nuevoCliente-&gt;strCliente.saldoEPP &lt;&lt;" Cliente :"&lt;&lt;nuevoCliente-&gt;strCliente.numCliente&lt;&lt;std::endl;
                            }
                        }
                        else
                        {
                            bwrite  = false;
                            msglog = msglog + "Canal BH2 Linea " + std::to_string(i) + "; ";
                        }
                    }/*Fin if Canal BH2*/                   
                    else if(canal == "BH6")
                    {
                        if (tmaline &gt;= 453) 
                        {
                            nuevoCliente-&gt;strCliente.plasticID=linea.substr(148,3);
                            nuevoCliente-&gt;strCliente.disenoImpresion=dameDisenoImpresion(impresion, linea.substr(148,3)+" "+bin);
                            nuevoCliente-&gt;strCliente.tipoImpresion=dameTipoImpresion(impresion, linea.substr(148,3)+" "+bin);
                            std::string rfc = isRfcValido(linea.substr(440,13));                    //RFC
                            //string rfc;
                            nuevoCliente-&gt;strCliente.tipoPer = rfc.substr(0, 2);
                            nuevoCliente-&gt;strCliente.rfcFinal = rfc.substr(2, (rfc.length()-2));
                            if(nuevoCliente-&gt;strCliente.tipoPer == ("PI"))
                            {
                                nuevoCliente-&gt;strCliente.tipoPer ="RFC INCORRECTO";
                            }
                        }
                        else
                        {
                            bwrite  = false;
                            msglog = msglog + "Canal BH6 Linea " + std::to_string(i) + "; ";                                                        
                        }
                    }/*Fin if Canal BH6*/                   
                    else if (canal == "BHV")
                    {
                        if( tmaline &gt;= 318 ){

                            if(linea.substr(101,12) !="00000000000 ")
                                nuevoCliente-&gt;strCliente.saldoPromCompr = convierteCifras(linea.substr(101,12));

                            if(linea.substr(306,12)!="00000000000 ")
                                nuevoCliente-&gt;strCliente.saldoPromDispo = convierteCifras(linea.substr(306,12));

                            if(linea.substr(227,12)!="00000000000 ")
                                nuevoCliente-&gt;strCliente.saldoProm = convierteCifras(linea.substr(227,12));

                            if(linea.substr(164,12)!="00000000000 ")
                                nuevoCliente-&gt;strCliente.saldoPromDispMax = convierteCifras(linea.substr(164,12));
                        }
                        else{
                            bwrite  = false;
                            msglog = msglog + "Canal BHV Linea " + std::to_string(i) + "; ";                                                        
                        }
                    }/*Fin if Canal BHV*/                   
                }/*FIN DEL ELSE AL HD*/                         
            }/*FIN DEL CICLO*/          
            file.close();
        }/*FIN DEL IF OPEN*/
        else
        {
            std::cout&lt;&lt;"ERROR!!! el archivo "&lt;&lt;path&lt;&lt;" no se pudo crear"&lt;&lt;std::endl;            
        } 
        delete(nuevoCliente);
        std::cout&lt;&lt;"sale del extrae"&lt;&lt;std::endl;    
        // file.close();
        return clientesF;           
}/*FIN DEL EXTRAE*/
</code></pre>

<p>And in the main i have a for each loop that calls the extraction function for every single file read</p>

<pre><code>enter code here
int main(int argc, char** args)
{
    time_t now = time(0);
    tm *ltm = gmtime(&amp;now); 
    std::string shini = std::to_string(ltm-&gt;tm_hour)+":"+std::to_string(ltm-&gt;tm_min)+":"+std::to_string(ltm-&gt;tm_sec);
    std::ofstream archivo;
    archivo.open("/desarrollo/pruebasc++/pruebasJuan/Salida/tiempos.txt");
    archivo&lt;&lt;shini&lt;&lt;std::endl;
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
//comienza la prueba
    Extraccion ex = {};
    ManejaArchivos archivos{};
    std::vector&lt;Cliente&gt; todosClientes;
    std::vector&lt;BanderaEnvio&gt; banderasEnvio;
    std::vector&lt;CFD&gt; CFDS;
    std::vector&lt;TIM&gt; TIMS;
    std::vector&lt;CentroReparto&gt; centrosReparto;
    std::vector&lt;DomiciliacionS702&gt; domicilios;
    std::vector&lt;CargosEnAclaracion&gt; cargos;
    std::vector&lt;CaracImpresion&gt; impresiones;
    std::vector&lt;Journal&gt; journals;  
    banderasEnvio.clear();
    centrosReparto.clear();
    impresiones.clear();    
    std::string pathENTR = "";
    std::string pathJOUR = "";
    int ppba = 1; /*1- Usa la ruta de Producción; 2- Usa nuestra ruta de prueba*/
    if (ppba == 1)
    {
        pathENTR = "/NAS01/01.Ingenieria_NFS/08_Agosto";//args[0];//C:/Users/efmartinezg/Desktop/IsaacDATAMART_030916";
        pathJOUR = "/user1/BANAMEX/Salida_doc1/TDC_L6_ECS/08_Agosto";//args[1];//"C:/Users/efmartinezg/Desktop/IsaacDATAMART_030916/jour";
    }
    else
    {
        pathENTR = "/desarrollo/pruebasc++/pruebasJuan/ENTR";//args[0];//C:/Users/efmartinezg/Desktop/IsaacDATAMART_030916";
        pathJOUR = "/desarrollo/pruebasc++/pruebasJuan/JOURNAL";//args[1];//"C:/Users/efmartinezg/Desktop/IsaacDATAMART_030916/jour";
    }   
    std::string pathMedioEnvio = "/NAS01/01.Ingenieria_NFS/08_Agosto/Medio_envio_Flag.TXT";//args[2];//"C:/Users/efmartinezg/Desktop/IsaacDATAMART_030916/otros/Medio_envio_Flag.TXT";
    std::string pathSalida = "/desarrollo/pruebasc++/pruebasJuan/Salida";//args[3];//"C:/Users/efmartinezg/Desktop/IsaacDATAMART_030916/Salida";
    std::string pathCentrRep = "/NAS01/01.Ingenieria_NFS/08_Agosto/catalogo_sepomex.txt";//args[4];//"C:/Users/efmartinezg/Desktop/IsaacDATAMART_030916/otros/catalogo_sepomex.txt";
    std::string pathImpresion = "/NAS01/01.Ingenieria_NFS/08_Agosto/ControlBanderas.txt";//args[5];//C:/Users/efmartinezg/Desktop/IsaacDATAMART_030916/otros/ControlBanderas.txt";  
    double pesoENTR = 0;
    double pesoDOM = 0;
    double pesoDISP = 0;
    double pesoTIM = 0;
    double pesoCFD = 0;
    double pesoJOUR = 0;
    double sumaPesos = 0;
    double tiempo = 0;
    std::vector&lt;std::string&gt; jours; 
    std::vector&lt;std::string&gt; entrs = archivos.getENTRS(pathENTR);
    archivo&lt;&lt;"Nombres de archivos"&lt;&lt;std::endl;
    int contadorIteraciones = 0;    
    if (entrs.size() &gt;= 1 )
    {
        std::cout&lt;&lt;"Lee los Catalogos Medio_envio_Flag, BanderaEnvio y CaracImpresion"&lt;&lt;std::endl;
        banderasEnvio = archivos.leerBanderaEnvio(pathMedioEnvio);
        centrosReparto = archivos.leerCentroReparto(pathCentrRep);
        impresiones = archivos.leerCaractImpresion(pathImpresion);      
    }
    for(auto arch : entrs)
    {
        contadorIteraciones++;
        archivo&lt;&lt;contadorIteraciones&lt;&lt;"--Procesando Archivo ENTR: "&lt;&lt;arch&lt;&lt;"----------------------------------------------"&lt;&lt;std::endl;
        std::cout&lt;&lt;contadorIteraciones&lt;&lt;"--Procesando Archivo ENTR: "&lt;&lt;arch&lt;&lt;"-------------------------------------------------------------"&lt;&lt;std::endl;
        std::cout&lt;&lt;"  Procesando.... *"&lt;&lt;std::endl;
        // //std::cout&lt;&lt;pathJOUR&lt;&lt;" -- antes del getJournals"&lt;&lt;std::endl;
        jours = archivos.getJournals(pathJOUR, arch);
        std::string pathUnJour = "";
        for (auto jour : jours)
        {
            archivo&lt;&lt;"   -Jour: "&lt;&lt;" -- "&lt;&lt;jour&lt;&lt;std::endl;
            journals.clear();
            journals = archivos.leeJournal(pathUnJour, jour);       
            pathUnJour = "";
        }
        std::string nombreCFD = archivos.archivoRelacionado(pathENTR, arch, "CFD");
        if(nombreCFD != "" )
        {   
            CFDS.clear();
            CFDS = archivos.leeCFD(pathENTR, nombreCFD);
        }

        std::string nombreTIM = archivos.archivoRelacionado(pathENTR, arch, "TIM");
        if(nombreTIM != "" )
        {
            TIMS.clear();
            TIMS = archivos.leeTIM(pathENTR, nombreTIM);
        }
        std::string nombreDomiciliacion = archivos.getArchivotS702(pathENTR, arch); 
        std::string nombreDisp = archivos.getArchivoEPSTDISP(pathENTR, arch);       
        domicilios.clear();
        domicilios = archivos.leerDomiciliacion(pathENTR);      
        cargos.clear();
        cargos = archivos.leerCargosAclaracion(pathENTR);
        std::string pathArchivo = pathENTR + "/" + arch;
        todosClientes.clear();
        todosClientes = ex.extrae(pathArchivo, journals, banderasEnvio, CFDS, TIMS, centrosReparto, domicilios, cargos, impresiones);
        archivos.generaArchivo(pathSalida, todosClientes, arch);
        std::cout&lt;&lt;"  Procesando.... +"&lt;&lt;std::endl;
    }
    time_t tfin = time(0);  
    ltm = gmtime(&amp;tfin);    
    std::string shfin = std::to_string(ltm-&gt;tm_hour) + ":" + std::to_string(ltm-&gt;tm_min) + ":" + std::to_string(ltm-&gt;tm_sec);
    archivo&lt;&lt;shfin;
    archivo.close();    
    return 0;
}
</code></pre>

<p>by the way, i use a linux base server to compile, thank you everyone!</p>