Uproszczenie kodu

0

Witam mam kod programu pobierający listę plików z folderu a następnie jest generowany plik log.txt z lokalizacją pliku, rozmiarem pliku i sumą crc16. I teraz mam pytanie do was czy da radę jakoś ten kod uprościć bo wygląda "brzydko" :D

#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QDir>
#include <QFileInfo>
#include <QTextStream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile log("D:/log.txt");
    if(!log.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        qDebug() << "Nie można otworzyć pliku log.txt";
    }

    QTextStream out(&log);

    QString lnk = "D:/program_ftp/folder/";

    QDir dir(lnk);
    dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::NoSymLinks);             // Ustawienie filtrów
    dir.setSorting(QDir::Name);                                                                     // Ustawienie sortowania

    QFileInfoList dir_list = dir.entryInfoList();                                                   // Utworzenie listy folderów

    for(int i = 0; i < dir_list.size(); ++i)
    {
        QFileInfo dirInfo = dir_list.at(i);

        qDebug() << dirInfo.fileName();

        QString lnk_file = lnk + dirInfo.fileName();

        QDir dir2(lnk_file);

        dir2.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
        dir2.setSorting(QDir::Name);

        QFileInfoList file_list = dir2.entryInfoList();

        for(int j = 0; j < file_list.size(); ++j)
        {
            QFileInfo fileInfo = file_list.at(j);
            QString lnk_file_sum = lnk_file + "/" + fileInfo.fileName();
            QFile *file = new QFile(lnk_file_sum);
            file->open(QIODevice::ReadOnly);

            QByteArray byte = file->read(524288);

            quint16 crcSum = qChecksum(byte.data(), byte.length());

            file->close();

            qDebug() << "\t" << fileInfo.fileName();

            out << lnk_file << "/" << fileInfo.fileName() << "\t" << fileInfo.size() << "\t" << QString::number(crcSum, 16) << endl;
        }
    }

    dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
    dir.setSorting(QDir::Name);

    QFileInfoList file_default_folder = dir.entryInfoList();

    for(int k = 0; k < file_default_folder.size(); ++k)
    {
        QFileInfo fileInfo = file_default_folder.at(k);
        QFile *file = new QFile(lnk + fileInfo.fileName());
        file->open(QIODevice::ReadOnly);
        QByteArray byte = file->read(524288);

        quint16 crcSum = qChecksum(byte.data(), byte.length());

        file->close();

        out << lnk << fileInfo.fileName() << "\t" << fileInfo.size() << "\t" << QString::number(crcSum, 16) << endl;
    }

    log.close();

    return a.exec();
}
0

Podzielic go na małe metody. Ja na przykład patrząc na ten kod w ogóle nie wiem co on robi. A jakbyś w main miał dwie linijki:

x = getFilesList();
generateLogFile(x);

To bym się mógł domyślić. Następnie każda z tych metod sama składałaby się z innych, równie małych i prostych.

0

@Shalom a jak przerobić kod aby sam chodził po drzewie folderów i wypisywał informacje o pliku

0

Powoli, najpierw przerób go zgodnie z tym, co powiedział @Shalom.

1 użytkowników online, w tym zalogowanych: 0, gości: 1