Операция копирования файлов не работает в отдельном потоке? - PullRequest
0 голосов
/ 02 января 2011

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

Я обнаружил, что он не работает в отдельном потоке.

Почему это не работает?

void CopyOperation::run()
{ 
    CopyFilesToFolder(list,sFolder); 
}

bool CopyOperation::CopyFilesToFolder(const QStringList &oFileList,const QString 
&sTargetFolder)
{

if(sTargetFolder.isEmpty())
 {

    status = false;
    return false;
}

QDir dir(sTargetFolder);

if(!dir.exists()) dir.mkdir(sTargetFolder);

QString sOldDirPath = dir.currentPath();

//if(!dir.setCurrent(sTargetFolder)) return false;

QFile file;
status = true;

foreach(QString sFileName,oFileList)
{
    file.setFileName(sFileName);

    QFileInfo info(sFileName);

    QString newfile =  sTargetFolder + "/" +  info.fileName();

    qDebug() << "\n name = " << newfile;

    if(!QFile::copy(sFileName,newfile))
    //if(!file.copy(newfile))
    {
        qDebug() << "\n File copy failed .. " + file.fileName() + " Error : " + file.errorString();
        status = false;
        break;
    }

}

qDebug() << "\n Result .. " << file.errorString() << "code " <<  file.error();
//dir.setCurrent(sOldDirPath);

return status;
}

1 Ответ

1 голос
/ 02 января 2011

Поскольку вы не отправляли код, я просто могу попытаться угадать, в чем проблема. Qt имеет статическую функцию:

bool copy ( const QString & fileName, const QString & newName )

Существует также копия, которая не является статичной:

bool    copy ( const QString & newName )

Оба они потерпят неудачу, если файл, определенный newName, уже существует, т.е. существующий файл не будет перезаписан. Кроме того, возможно, путь не существует. Без какой-то части кода сложно угадать, в чем проблема.

...