[RESUELTO] Problema con la clase QFile, favor su ayuda



  • Tengo un problema con la implementacion de la clase QFile, quiero guadar en un archivo de texto plano unos ID's, resulta que cuando se guardar la primera vez no hay problema, crea el archivo y lo guarda sin problema, pero cuando llama nuevamente el metodo para guardar en el archivo, el cual ya existe, me limpia el contenido, lo deja en blanco... ya revise todas las posibles soluciones con los pocos conocimientos que tengo de Qt, por favor les pido de ayuda, adjunto el codigo ...

    @void frmAlumnos::ctrlFile(const QString &nomArc, QString idReg) // GUARDAR EL ARCHIVO DE CONTROL
    {
    QFile ctrlFile(nomArc);
    if(ctrlFile.exists()){
    ctrlFile.open(QIODevice::Text | QIODevice::ReadOnly);
    QTextStream txtstr(&ctrlFile);
    QString sli = txtstr.readAll();
    QString sli2;
    QStringList cad = sli.split("\n");

        ctrlFile.flush();
        ctrlFile.close();
    
        //sli+=idReg+"\n";
    
        ctrlFile.open(QIODevice::Text | QIODevice::WriteOnly);
        if (!ctrlFile.isOpen()){
            return;
        }else{
        QTextStream txtstr1(&ctrlFile);
        int ctrol=0;
        for (int i=0;i<cad.size();i++){
            if (cad[i].isEmpty()){return;} // SALIR CUANDO LLEGUE AL FINAL DEL ARCHIVO (ESPACIO EN BLANCO)
            if (cad[i]==idReg){
                ctrol++;
            }
            sli2+=cad[i]+"\n";
        }
        if (ctrol<=0){
            sli2+=idReg+"\n";
        }
        txtstr1<<sli2;
        ctrlFile.flush();
        ctrlFile.close();
        }
    
    }else{
        ctrlFile.open(QIODevice::Text | QIODevice::WriteOnly);
        if(!ctrlFile.isOpen()){return;}
        QTextStream txtstr(&ctrlFile);
        txtstr<<idReg+"\n";
        ctrlFile.flush();
        ctrlFile.close();
    }
    

    }
    @

    Si alguien sabe donde esta el error, o si hay una mejor forma de hacerlo ... Muchas Gracias ...



  • Hola

    Tienes que abrir el archivo como QIODevice::Append para que lo que vayas guardando en el archivo lo coloque al final del mismo y no machaque la información cada vez que intentas escribir.

    http://qt-project.org/doc/qt-5/qiodevice.html#OpenModeFlag-enum

    Saludos



  • Aaaaah ok muchas gracias... buen punto juanki ... probare con eso


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.