我和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();
}提前谢谢。
发布于 2012-07-09 09:32:41
QFtp的几种方法的文档中写道:
函数不阻塞,立即返回。命令被调度,并且其执行是异步执行的。该函数返回由
commandStarted()和commandFinished()传递的唯一标识符。
因此,您需要等待适当的信号发出。
请注意,您也可以使用QNetworkRequest来请求整个ftp (我认为即使在URL中包含用户名和密码)来下载文件。
发布于 2012-07-09 12:38:09
我解决了我的问题。每次发出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;
}
}标志变量的原因是需要对程序进行进一步解释的其他原因,因此我不会继续下去。
谢谢你的帮助。不知何故,这对我帮助很大。
https://stackoverflow.com/questions/11386987
复制相似问题