0

我遇到了 QFtp 的问题。我想从我的服务器下载一个单行(8 字节)的 .txt 文件,所以我编写了以下代码,但它不起作用。在 folder1 目录中创建了文件“actions.txt”。我可以在客户端很好地看到它的大小。但是文件没有被写入。我得到一个空文件。

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()and 传递的唯一标识符commandFinished()

因此,您需要等待发出适当的信号。

请注意,您还可以使用QNetworkRequest请求整个 ftp URL(我认为即使在 URL 中包含用户名和密码)来下载文件。

于 2012-07-09T01:32:40.613 回答
0

我解决了我的问题。每次发出 commandFininshed 信号时,我都会处理一个步骤。像这样:

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

flag 变量的原因是其他需要对程序进行进一步解释的原因,所以我不会走那条路。

谢谢你的帮助。它以某种方式帮助了我很多。

于 2012-07-09T04:38:08.923 回答