【问题标题】:QT Splitting files inside folder into different subfoldersQT将文件夹内的文件拆分为不同的子文件夹
【发布时间】:2014-08-14 09:25:34
【问题描述】:

我有以下代码将文件复制到子文件夹。但总是前 20 张图片而不是 1-20 复制到第一个文件夹,21-40 复制到第二个文件夹,41-60 复制到第三个文件夹:

QDir dir(ui->lineEdit->text());
QList<QString> fileNameList;
QFileInfoList files = dir.entryInfoList();
foreach(const QFileInfo &fi, files) {
    if(!fi.isDir()) {
        if (fi.fileName().endsWith(".JPG")) {
            fileNameList.append(fi.fileName());
        }
    }
}

int parts = (int) (fileNameList.size()) / ui->spinBox->value();

qDebug() << "parts=" << parts;

for (int i = 0; i < parts; i++) {
    QDir().mkdir(ui->lineEdit->text() + QString("/part%1").arg(i + 1));
    for (int l = 0; l < ui->spinBox->value(); l++) {
        QFile::copy(ui->lineEdit->text() + "/" + fileNameList.at(l), ui->lineEdit->text() + QString("/part%1").arg(i + 1) + "/" + fileNameList.at(l));
    }
}

【问题讨论】:

    标签: qt file-copying


    【解决方案1】:

    问题在于fileNameList 的索引。你总是将它从0 索引到l 这导致总是复制第一个文件。应该是这样的:

    int index = i*ui->spinBox->value() + l;
    QFile::copy(ui->lineEdit->text() + "/" + fileNameList.at(index), ui->lineEdit->text() + QString("/part%1").arg(i + 1) + "/" + fileNameList.at(index));
    

    【讨论】:

    • 图像集如何重叠?就像第一部分有图像 1,2,3,4,5 和 6,第二部分有图像 4,5,6,7,8 和 9,第三部分有 7,8,9,10,11,12部分?
    • 如果你想有重叠,那么部分的数量变为:int parts = (int) (fileNameList.size()-overlap) / (ui-&gt;spinBox-&gt;value()-overlap);。并且内部for循环中文件的索引是:int index = i*(ui-&gt;spinBox-&gt;value()-overlap) + l;。这里overlap3
    • 太棒了!非常感谢!
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 2017-05-20
    • 2015-04-20
    • 2013-05-02
    • 2013-04-14
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多