文件复制操作在单独的线程中不起作用?

时间:2011-01-02 18:43:58

标签: qt qthread

我正在尝试运行在其他线程中复制文件的代码,以便它不会冻结应用程序的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;
}

1 个答案:

答案 0 :(得分:1)

由于你没有发布代码,我只能猜测是什么问题。 Qt有一个静态函数:

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

还有一个非静态的副本:

bool    copy ( const QString & newName )

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