0

我正在尝试在其他线程中运行复制文件的代码,这样它就不会冻结应用程序的 GUI。

我发现它似乎不适用于单独的线程。

为什么它不工作?

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

1 回答 1

1

由于您没有发布代码,我只能尝试猜测问题所在。Qt 有一个静态函数:

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

还有一个不是静态的副本:

bool    copy ( const QString & newName )

如果定义的文件已经存在,它们都将失败newName,即。现有文件不会被覆盖。另外,也许路径不存在。没有部分代码很难猜出问题所在。

于 2011-01-02T18:57:41.693 回答