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

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

  • 相关阅读:
    JavaScript 中,定义函数时用 var foo = function () {} 和 function foo() 有什么区别?
    Vue报错 [Vue warn]: Cannot find element
    一个android样本的过保护
    cve-2015-1635漏洞分析
    一个linux的样本分析
    ios透明代理抓包
    各浏览器抗uaf机制
    面试知识点总结之Nginx
    面试知识点总结之redis
    面试知识点总结之I/O流IO/BIO/NIO/AIO区别
  • 原文地址:https://www.cnblogs.com/keleman/p/13542926.html
Copyright © 2011-2022 走看看