• 4082阅读
  • 8回复

[提问]ftp客户端,一起下载根目录下内容时的显示问题 [复制链接]

上一主题 下一主题
 
只看楼主 倒序阅读 楼主  发表于: 2013-02-17
ftp客户端中,单击下载按钮实现所有文件的下载时出现文件内容不显示问题
服务器下有16个文件,文件名分别定义为char name[16][100];
然后在下载按钮的槽函数中进行以下代码
char fileName[16][100];
for(int i = 0 ; i < 16 ; i++)
{
strcpy(fileName,name);
localFile=new QFile(fileName);
localFile->open(QIODevice::WriteOnly);
ftpClient->get(fileName,localFile);
}
这样的话是可以编译通过的,单击按钮时也会下载成功了,只是下载下来的文件中fileName[0]到fileName[14]是空文件,只有fileName[15]是有内容的,不知道这是什么原因。谢谢!
只看该作者 1楼 发表于: 2013-02-17
回 楼主(可爱的孩子) 的帖子
循环写错了,是这样子的
for(int i = 0 ; i < 16 ; i++)
{
strcpy(fileName,name);
localFile=new QFile(fileName);
localFile->open(QIODevice::WriteOnly);
ftpClient->get(fileName,localFile);
}
只看该作者 2楼 发表于: 2013-02-17
回 楼主(可爱的孩子) 的帖子
fileName和name后面都是带【i】的,怎么打印不上去
离线pxiao_xiao

只看该作者 3楼 发表于: 2013-02-18
用递归呀兄台.......
只看该作者 4楼 发表于: 2013-02-18
回 3楼(pxiao_xiao) 的帖子
我这样子为什么不行呢?
离线pxiao_xiao

只看该作者 5楼 发表于: 2013-02-18
ftp是异步的.......
须等某个文件的下载状态达到完成态,才能保证下个文件对上个文件无影响
只看该作者 6楼 发表于: 2013-02-18
回 5楼(pxiao_xiao) 的帖子
哦,这样的,我用了递归好像也不行的,麻烦帮我看看
void FtpClient::getdown(int num)
{
    localFile=new QFile(fileName[num]);
    localFile->open(QIODevice::WriteOnly);
    ftpClient->get(fileName[num],localFile);
    if(num > 0)
    {
        --num;
        getdown(num);
    }
按照这样单击后应该会下载3个文件的,确实下载了3个,但是num为1和2时的文件时空的,只有num为0时的文件才有内容的,为什么呢
}
void FtpClient::slotGet()
{
    n = 2;
    getdown(n);
    curStatus=GET;
}
离线pxiao_xiao

只看该作者 7楼 发表于: 2013-02-18
get()后应该等待这个命令完成,会发出readyRead()信号,看Qt给的例子,里面给了ftpCommandFinished(int id, bool error)函数原型,这个函数里判断某个文件下载完毕的信号,在接着下一个文件下载。
必须去判断各种QFtp的行为状态
离线gova
只看该作者 8楼 发表于: 2013-03-15
你for循环内应该是给每个数组元素赋值啊,两个变量都没有指定不同的地址,不就只是把数组首地址的数据赋值了么。16个循环下来只是做了一个操作,所以才会产生只下载一个文件的问题。
快速回复
限100 字节
 
上一个 下一个