0

QFtpに問題があります。サーバーから1行(8バイト)の単一の.txtファイルをダウンロードしたいので、次のコードを記述しましたが、機能しません。ファイル「actions.txt」がfolder1ディレクトリに作成されました。クライアント側でそのサイズをかなりよく見ることができます。しかし、ファイルは書き込まれていません。空のファイルを取得しています。

QFile* actionFile = new QFile("action.txt");
QFtp *ftp = new QFtp(parent);

void Dialog::getActionFile() 
{ 
    actionFile->open(QIODevice::WriteOnly);
    ftp->connectToHost("mydomain.de"); 
    ftp->login("user", "pw"); 
    ftp->cd("folder1"); 
    ftp->get("action.txt",actionFile); 
    ftp->close(); 
    actionFile->close(); 
}

前もって感謝します。

4

2 に答える 2

1

のいくつかの方法のドキュメントには、次のように記載されていQFtpます。

関数はブロックせず、すぐに戻ります。コマンドはスケジュールされ、その実行は非同期で実行されます。commandStarted()この関数は、および によって渡される一意の識別子を返しますcommandFinished()

したがって、適切なシグナルが発行されるのを待つ必要があります。

ファイルをダウンロードするために、ftp URL全体をリクエストするために使用することもできQNetworkRequestます(URL内にユーザー名とパスワードが含まれていると思います)。

于 2012-07-09T01:32:40.613 に答える
0

私は自分の問題を解決しました。commandFininshedシグナルが発行されるたびに1ステップ処理しました。このような:

void MainWindow::ftpCommandFinished(int id, bool error)
{
    static bool flag = false;
    if(ftp->currentCommand() == QFtp::ConnectToHost)
        checkUpdate();
    if(ftp->currentCommand() == QFtp::Get)
    {
        file->close();
        if(error)
        {
            QMessageBox::warning(this, "Erro!", ftp->errorString());
            deleteLater();
            return;
        }
        if(!flag)
            checkVersion();
        else{
            delete ftp, file;
            ftp = 0; file = 0;
        }
        flag = true;
    }
}

フラグ変数の理由は、プログラムについてさらに説明する必要がある他の何かであるため、私はその道を進みません。

助けてくれてありがとう。それはどういうわけか私を大いに助けました。

于 2012-07-09T04:38:08.923 に答える