2011-01-02 14 views
0

Ich versuche Code von Dateien in anderen Thread zu kopieren, so dass es nicht die GUI der Anwendung einfrieren kann.Dateikopiervorgang funktioniert nicht in einem separaten Thread?

Ich fand, dass es scheint nicht in einem separaten Thread zu arbeiten.

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; 
} 
+1

Sie sollten etwas Code posten. – Vladimir

+0

CopyOperation :: QThread – Ashish

Antwort

1

Da Sie nicht Code eingeben, 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 scheitern, wenn die Datei von newName definiert bereits vorhanden ist, dh. vorhandene Datei wird nicht überschrieben. Vielleicht existiert der Pfad auch nicht. Ohne einen Teil des Codes ist es schwierig zu erraten, was das Problem ist.

+0

Ich habe Snippet hinzugefügt, meine CopyOpetaion ist QThread abgeleitete Klasse. – Ashish

+0

Ich sage nicht, dass * Sie * es falsch machen, aber vielleicht sollten Sie diesen Artikel lesen: http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/ –

+2

Es scheint, dass der gebuchte Code funktioniert (natürlich, wenn der nicht deklarierte 'Status' ignoriert wird). Ich habe es in einer einfachen Konsolenanwendung getestet und Dateien kopiert. Vielleicht hast du den Thread nicht richtig gestartet? Welche Art von Fehler haben Sie erhalten? Hast du die Funktion 'start()' aufgerufen, um die Thread-Ausführung zu starten? – Vladimir

Verwandte Themen