使用QFtp下载单个.txt

时间:2012-07-08 21:48:27

标签: c++ file qt ftp

我的QFtp有问题。我想从我的服务器下载单行。(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(); 
}

提前致谢。

2 个答案:

答案 0 :(得分:1)

QFtp几种方法的文档说:

  

功能不会阻止并立即返回。命令是   已调度,并且异步执行其执行。功能   返回由commandStarted()传递的唯一标识符   commandFinished()

所以你需要等待发出适当的信号。

请注意,您还可以使用QNetworkRequest请求整个ftp网址(我认为即使使用网址中的用户名和密码)也可以下载该文件。

答案 1 :(得分: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;
    }
}

标志变量的原因是需要进一步解释该程序的其他原因,所以我不会走这条路。

谢谢你的帮助。它在某种程度上帮助了我很多。