我的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();
}
提前致谢。
答案 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;
}
}
标志变量的原因是需要进一步解释该程序的其他原因,所以我不会走这条路。
谢谢你的帮助。它在某种程度上帮助了我很多。