2014-06-24 4 views
0

하위 폴더로 파일을 복사하는 데 다음 코드가 있습니다. 그러나 항상 첫 번째 20 개 사진 대신 제 폴더에 두 번째 폴더의 첫 번째 폴더에 1-20, 21-40 및 41-60의 복사됩니다QT 폴더 내의 파일을 다른 하위 폴더로 분할

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

답변

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

감사합니다. – user754730

+0

이미지 세트의 겹침은 어떻게합니까? 첫 번째 부분에 이미지 1,2,3,4,5 및 6이 있고 두 번째 부분에는 이미지 4,5,6,7,8 및 9가 있고 세 번째 부분에는 이미지 7, 8,9,10,11,12가있는 것처럼 부품? – user754730

+1

겹치기를 원하면 파트의 수는 다음과 같이됩니다. 'int parts = (int) (fileNameList.size() - overlap)/(ui-> spinBox-> value() - overlap); 그리고 내부 for 루프에있는 파일의 인덱스는 다음과 같습니다 :'int index = i * (ui-> spinbox-> value() - overlap) + l;'. 여기서'overlap '은'3'입니다. – Nejat