Проблема с функцией копирования - PullRequest
0 голосов
/ 03 мая 2011

Я работаю в файловом браузере, и в нем есть функция, которая также позволяет копировать папки и файлы.Проблема, с которой я сталкиваюсь, заключается в том, что моя функция работает нормально для операции копирования в одну папку и для работы с несколькими файлами.Но когда я пытаюсь скопировать несколько папок с файлами, фодер с подпапками внутри, кажется, не копируется.

Что я здесь не так делаю?Пожалуйста, предложите что-нибудь.Вот код, который я написал

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

1 Ответ

0 голосов
/ 24 мая 2012

Извините, это действительно поздно, но, возможно, это то, что вы ищете?

Копировать каталог с помощью Qt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...