Die Operation der Dateikopie funktioniert nicht in einem separaten Thread?
Frage
Ich versuche, Code des Kopierens von Dateien in einem anderen Thread auszuführen, damit er die GUI der Anwendung nicht einfrieren kann.
Ich fand heraus, dass es nicht in einem separaten Thread zu funktionieren scheint.
Warum funktioniert es nicht?
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;
}
Lösung
Da Sie die Code nicht gepostet haben, kann ich nur versuchen zu erraten, was das Problem ist. QT hat eine statische Funktion:
bool copy ( const QString & fileName, const QString & newName )
Es gibt auch eine Kopie, die nicht statisch ist:
bool copy ( const QString & newName )
Beide werden fehlschlagen, wenn die Datei definiert durch newName
existiert bereits, dh. Die vorhandene Datei wird nicht überschrieben. Vielleicht existiert auch der Weg nicht. Ohne einen Teil des Codes ist schwer zu erraten, was das Problem ist.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow