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;
}
War es hilfreich?

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
scroll top