zoukankan      html  css  js  c++  java
  • qftp 编程模型

    编程模型我理解为 相关领域的api的使用方式,先后次序。有对象式的,有命令相应式的等等。

    如果要用QFtp 写程序 比如下载指定服务器的目录(递归)

    如果不知道的它的编程模型 会是一头雾水

    qftp 和常规编程不一样是基于命令列表处理数据的

    以qt4gui编程的15章中 编写ftp客户端为例

    对于ftp的编程模型

    ftp发出一系列命令 如 connectToHost,login,cd .list(),onCommandStarted ,onCommandFinished,done等命令,

    这些命令之间的关系,使用约定 ,决定这程序的开发方式

    1:每个命令发出时 发射 onCommandStarted 结束时 发射OnComandFinished 信号 可以根据参数 判断当前执行的是什么命令,以及执行动作

    2:list()每发现一个文件/目录就发射一个listIInfo信号,而不是list完当前目录就发射一次listInfo信号。

    3:done 信号什么是否发射呢????

    当命令队列中没有命令了就发射。而不是ftp退出时才发射 。理解这点很重要,

    4:list一个目录后没有再执行其他命令时 队列就没命令了此时发射 done信号

    要搞清这些命令之间的使用前置条件 后置条件,否则各个命令你中有我我中有你,叫人没有头绪使用这些api

    举例 实现15章中ftp客户端中的 p276页中只浏览当前目录 。当前录浏览后再一起下载当前目录的文件,(不是list一个文件就下载一个文件,书上是浏览一个文件下载一个文件)

    首先 增加一个成员变量 QStringList 记录list当前目录 得到的文件名 ,当list下一个目录之前清空。

    ftpListInfo(const QUrlInfo& urlInfo)

    {//beg

      if(urlInfo.isFile()){

     if(urlInfo.isReadable())

    {

      filePathList.append(urlInfo.name());

    }

    }

    else if(urlInfo.isDir())

    {

      pendingDirs.append(currentDir+"/"+urlInfo.name());//注意这里要记录路径**********************************

    }

    }//end

    ftpdone(bool error)

    {//begin

    if(error) return;

    if(openedFiles.size()>0)

    {

      qDeleteAll(openedFiles);

      openedFiles.clear();

    }

    for(int i=0;i< filePathList.size();i++)

    {

      QFile * file= new QFile(currentLocalDir +"/"+filePathLit[i]);

      if(file->open(QIODivce::WiteOnly)){ return ; }

      ftp.get(filePathList[i],file);

          openfileFiles.append(file);

    }

    filePathList.clear();//清空当前目录的文件列表

    proccessNextDirectroy();

    }//emd

     由于是手工敲击 难免笔误 。思路是对的,并已执行成功

  • 相关阅读:
    Nginx反向代理和jetty服务器配置
    如何使用canvas绘图
    毕业后,你折腾了多久做了多少努力才找到正确的方向或者道路?
    如何提高用户逃离成本
    首次创业者必须知道哪些基本常识?
    拦截器、过滤器、监听器各有什么作用
    第一人称入行分享贴:大学混了四年,如何顺利入行互联网
    线下学习
    如何实现数组深拷贝和浅拷贝?
    从零学前端第二讲:CSS行内块级元素布局与定位
  • 原文地址:https://www.cnblogs.com/keleman/p/13542926.html
Copyright © 2011-2022 走看看