2011-01-02 18 views
0

他のスレッドでファイルをコピーするコードを実行しようとしているため、アプリケーションの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

コードを投稿する必要があります。 – Vladimir

+0

CopyOperation :: QThread – Ashish

答えて

1

コードを投稿していないので、私はちょうど問題が何かを推測しようとすることができます。 Qtは、静的な機能を持っています

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

静的ではありませんコピーもあります:

bool copy (const QString & newName) 

newNameによって定義されたファイルが既に存在する場合は、それらの両方が失敗する、すなわち。既存のファイルは上書きされません。また、おそらくパスが存在しません。コードの一部がないと、問題が何であるかを推測することは困難です。

+0

私はスニペットを追加しました。私のCopyOpetaionはQThread派生クラスです。 – Ashish

+0

私はあなたが間違っていると言っているわけではありませんが、この記事を読むべきでしょう:http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/ –

+2

投稿されたコードが動作しているようです(もちろん、宣言されていない 'ステータス'は無視されます)。私は単純なコンソールアプリケーションでそれをテストし、ファイルがコピーされます。多分あなたはスレッドを正しく開始しなかったでしょうか?どのようなエラーがありましたか?スレッドの実行を開始するために関数 'start()'を呼び出しましたか? – Vladimir

関連する問題