我正在尝试运行在其他线程中复制文件的代码,以便它不会冻结应用程序的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;
}
答案 0 :(得分:1)
由于你没有发布代码,我只能猜测是什么问题。 Qt有一个静态函数:
bool copy ( const QString & fileName, const QString & newName )
还有一个非静态的副本:
bool copy ( const QString & newName )
如果newName
定义的文件已经存在,那么它们都将失败,即。现有文件不会被覆盖。此外,也许路径不存在。没有一部分代码很难猜出是什么问题。