Я работаю в файловом браузере, и в нем есть функция, которая также позволяет копировать папки и файлы.Проблема, с которой я сталкиваюсь, заключается в том, что моя функция работает нормально для операции копирования в одну папку и для работы с несколькими файлами.Но когда я пытаюсь скопировать несколько папок с файлами, фодер с подпапками внутри, кажется, не копируется.
Что я здесь не так делаю?Пожалуйста, предложите что-нибудь.Вот код, который я написал
void Browser::copy()
{
MarkClicked=false;
if(multiSelect == true)
{
for(int i=0;i<indexList.size();i++)
{
qDebug()<<"indexlist.at(i)= "<<indexList.at(i);
source_files.append(model->filePath(indexList.at(i)));
}
}
else
{
index=list->selectionModel()->currentIndex();
source_file = (model->filePath(index));
}
CopyClicked=true;
copyAct->setEnabled(false);
CopyMenuRemoved=true;
pasteAct->setEnabled(true);
PasteMenuRmoved=false;
}
/*
This will perform paste operation.
*/
void Browser::pasteFile()
{
CopyClicked=false;
dest_index=list->selectionModel()->currentIndex();
QString destinationDir= model->filePath(dest_index);
if(multiSelect == true)
{
progress = new QProgressDialog("Copying...","",0, indexList.size(),this,Qt::SplashScreen);
progress->setAttribute(Qt::WA_DeleteOnClose);
progress->setWindowModality(Qt::WindowModal);
for(int i=0;i<indexList.size();i++)
{
progress->setValue(i);
progress->show();
if(model->isDir(indexList.at(i)))
{
QDir srcdir(source_files.at(i));
destinationDir = model->filePath(dest_index)+"/"+srcdir.dirName();
}
else
{
destinationDir = model->filePath(dest_index);
}
fileInfo=QFileInfo(source_files.at(i));
copySingle(source_files.at(i),destinationDir);
}
progress->close();
unmarkAll();
}
else
{
progress = new QProgressDialog("Copying...","",0, 0,this,Qt::SplashScreen);
progress->setAttribute(Qt::WA_DeleteOnClose);
progress->setWindowModality(Qt::WindowModal);
progress->show();
if(model->isDir(index))
{
QDir srcdir(source_file);
destinationDir = model->filePath(dest_index)+"/"+srcdir.dirName();
qDebug()<<"destination dir ===="<<destinationDir;
}else
{
destinationDir = model->filePath(dest_index);
qDebug()<<"destination dir ===="<<destinationDir;
}
fileInfo=QFileInfo(source_file);
copySingle(source_file,destinationDir);
unmarkAll();
}
progress->close();
unmarkAll();
copyAct->setEnabled(true);
CopyMenuRemoved=false;
pasteAct->setEnabled(false);
PasteMenuRmoved=true;
}
void Browser::copySingle(QString source_file,QString destinationDir)
{
if(model->fileInfo(index).isDir())
{
sourceDir=QDir(source_file);
if(!sourceDir.exists())
return;
QDir destDir(destinationDir);
if(!destDir.exists())
{
destDir.mkdir(destinationDir);
}
QStringList files = sourceDir.entryList(QDir::Files);
for(int i = 0; i< files.count(); i++)
{
QString srcName = source_file + "/" + files[i];
QString destName = destinationDir + "/" + files[i];
QFile::copy(srcName, destName);
}
files.clear();
files = sourceDir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot);
for(int i = 0; i< files.count(); i++)
{
QString srcName = source_file + "/" + files[i];
QString destName = destinationDir + "/" + files[i];
copySingle(srcName, destName);
}
}
else
{
QString destinationFile = destinationDir + "/" + fileInfo.fileName();
QFile::copy(source_file, destinationFile);
}
progress->close();
}