Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Comparare il contenuto di due cartelle



  • ciao!

    vorrei compare il contenuto di due cartelle, ma sto avendo qualche difficoltà.
    questo il contenuto:

    $ ls -l Desktop/A
    total 8
    -rw-r--r--@ 1 matte  staff  8  5 Feb 08:30 uno.txt
    
    $ ls -l Desktop/B
    total 16
    -rw-r--r--@ 1 matte  staff  5  5 Feb 08:30 due.txt
    -rw-r--r--@ 1 matte  staff  8  5 Feb 08:30 uno.txt
    

    quindi un file è uguale.
    mi sono fermato a questo codice, che ovviamente non funziona:

    #include <QCoreApplication>
    #include <QDebug>
    #include <QDir>
    
    int main(int argc, char *argv[]) {
        QCoreApplication a(argc, argv);
    
        QDir dirA("/Users/matte/Desktop/A");
        QDir dirB("/Users/matte/Desktop/B");
    
        QFileInfoList listaA = dirA.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden, QDir::DirsFirst);
        QFileInfoList listaB = dirB.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden, QDir::DirsFirst);
    
        for(int i = 0; i < listaA.size(); i++) {
            QFileInfo fileA = listaA.at(i);
            QFileInfo fileB = listaB.at(i);
    
            if(fileA.fileName() == fileB.fileName()) {
                qDebug() << "OK: " << fileA.fileName();
            } else {
                qDebug() << "KO: " << fileA.fileName();
            }
        }
    
        qDebug() << "-------------------";
    
        return a.exec();
    }
    
    

    nella cartella B il file uguale, viene dopo l'altro per un discorso di ordine alfabetico.
    e quindi già cosi non mi da il risultato corretto.
    come dovrei comparare le due liste??



  • @fermatqt Consiglio generale, se due container (in questo caso la lista dei file nella folder) hanno dimensione diversa fai senza controllare tutti gli elementi -> sono diverse



  • Prova a vedere se questo esempio ti può andare bene
    https://github.com/denisgottardello/BackupTo/blob/master/qthsynchronize.cpp
    funzione
    QThSynchronize::DirectoryCheckToCopy



  • Per comparare il contenuto delle cartelle, credo che basti comparare listaA e listaB


Log in to reply