2014-06-24 2 views
0

J'ai le code suivant pour copier des fichiers dans des sous-dossiers. Mais toujours les 20 premières images sont copiées au lieu de 1-20 dans le premier dossier, 21-40 au deuxième dossier et 41-60 au troisième dossier:QT Division des fichiers dans le dossier en différents sous-dossiers

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)); 
    } 
} 

Répondre

1

Le problème est avec l'indexation des fileNameList. Vous l'indexez toujours de 0 à l ce qui entraîne toujours la copie des premiers fichiers. Il devrait être comme:

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)); 
+0

Impressionnant merci! – user754730

+0

Comment puis-je avoir un chevauchement pour les jeux d'images? Comme avoir l'image 1,2,3,4,5 et 6 dans la première partie, l'image 4,5,6,7,8 et 9 dans la deuxième partie et 7,8,9,10,11,12 dans la troisième partie partie? – user754730

+1

Si vous voulez avoir des chevauchements alors le nombre de parties devient: 'int parties = (int) (fileNameList.size() - chevauchement)/(ui-> spinBox-> value() - chevauchement);'. Et l'index du fichier dans la boucle interne est: 'int index = i * (ui-> spinBox-> value() - chevauchement) + l;'. Ici 'overlap' est' 3'. – Nejat

Questions connexes