网盘——查看文件

本文主要讲解文件操作过程中,查看文件如何实现,实现步骤如下:

1、实现步骤:

A、首先客户端发送查看请求(包含目录信息)

B、服务器将文件名字还有文件的类型发送给客户端(只发送文件的名字)

C、客户端接收回复信息后,在文件列表里面显示

2、代码实现

在jack文件夹下提前放置以下文件,图片和文本文件

2.1、刷新文件夹槽函数

    void flushDir();
void Book::flushDir()
{QString strCurPath = TcpClient::getinstance().curPath();PDU *pdu =mkPDU(strCurPath.size()+1);pdu->uiMsgType=ENUM_MSG_TYPE_FLUSH_FRIEND_REQUEST;strncpy((char*)(pdu->caMsg),strCurPath.toStdString().c_str(),strCurPath.size());//发送给服务器TcpClient::getinstance().getTcpSocket().write((char*)pdu,pdu->uiPDULen);free(pdu);pdu=NULL;
}

2.2、关联刷新文件夹信号槽

    connect(m_pFlushFilePB,SIGNAL(clicked(bool)),this,SLOT(flushDir()));

2.3、添加刷新文件夹协议

    ENUM_MSG_TYPE_FLUSH_DIR_REQUEST,  //刷新文件夹请求ENUM_MSG_TYPE_FLUSH_DIR_RESPOND,  //刷新文件夹回复

2.4、服务器端创建刷新文件夹的请求

得到文件夹下的文件情况

case ENUM_MSG_TYPE_FLUSH_DIR_REQUEST:{qDebug()<<"cbdh";char *pCurPath = new char[pdu->uiMsgLen];memcpy(pCurPath,pdu->caMsg,pdu->uiMsgLen);//遍历目录,获得文件信息QDir dir(pCurPath);QFileInfoList fileInfoList = dir.entryInfoList();for(int i=0;i<fileInfoList.size();i++){qDebug()<<fileInfoList[i].fileName()<<fileInfoList[i].size()<<"文件夹:"<<fileInfoList[i].isDir()<<"常规文件:"<<fileInfoList[i].isFile();}break;}

2.5、定义一个结构体,将信息存起来

struct FileInfo
{char caFileName[32];//文件名字int  iFileType;//文件类型};

2.6、拷贝文件

    case ENUM_MSG_TYPE_FLUSH_DIR_REQUEST:{qDebug()<<"cbdh";char *pCurPath = new char[pdu->uiMsgLen];memcpy(pCurPath,pdu->caMsg,pdu->uiMsgLen);//遍历目录,获得文件信息QDir dir(pCurPath);QFileInfoList fileInfoList = dir.entryInfoList();//产生pduint iFileCount = fileInfoList.size();PDU *respdu = mkPDU(sizeof (FileInfo)*iFileCount);respdu->uiMsgType = ENUM_MSG_TYPE_FLUSH_DIR_RESPOND;FileInfo *pFileInfo =NULL;QString strFileName;for(int i=0;i<iFileCount;i++){//拷贝进去,跳到下一个结构体pFileInfo = (FileInfo*)(respdu->caMsg)+i;strFileName = fileInfoList[i].fileName();memcpy(pFileInfo->caFileName,strFileName.toStdString().c_str(),strFileName.size());//判断类型if(fileInfoList[i].isDir()){pFileInfo->iFileType=0;//表示是个文件夹}else if(fileInfoList[i].isFile()) {pFileInfo->iFileType =1;//常规文件}}//发送write((char*)respdu, respdu->uiPDULen);free(respdu);respdu =NULL;break;}

2.7、在客户端的Widget添加Book

    Book *getBook();
Book *OpeWidget::getBook()
{return m_pBook;
}

2.8、添加更新文件夹的函数

  //更新文件列表void updateFileList(const PDU *pdu);

2.9、在客户端添加回复的case

   case ENUM_MSG_TYPE_FLUSH_DIR_RESPOND:{OpeWidget::getInstance().getBook()->updateFileList(pdu);break;}

2.10、更新文件夹的函数

void Book::updateFileList(const PDU *pdu)
{if(NULL==pdu){return;}FileInfo *pFileInfo =NULL;int iCount = pdu->uiMsgLen/sizeof (FileInfo);for(int i=0 ;i<iCount;i++){pFileInfo =(FileInfo*)(pdu->caMsg)+i;qDebug()<<pFileInfo->caFileName<<pFileInfo->iFileType;QListWidgetItem *pItem = new QListWidgetItem;if(0==pFileInfo->iFileType){pItem->setIcon(QIcon(QPixmap(":/map/dir.jpg")));}else if(1==pFileInfo->iFileType) {pItem->setIcon(QIcon(QPixmap(":/map/reg.png")));}pItem->setText(pFileInfo->caFileName);m_pBookListW->addItem(pItem);}}

测试

成功!!!!!!!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux2.6内核进程调度队列

目录 运行队列runqueue 活跃队列&过期队列 queue[140]&优先级&队列数组下标 bitmap[5]&O(1)调度算法 nr_active active指针和expired指针 O(1)调度算法之调度过程 本篇是Linux进程概念篇的最后一篇&#xff0c;Linux2.6内核是一个具体的/可行的/实际的存…

【Node.js】03 —— HTTP 模块探索

&#x1f31f;Node.js之HTTP模块探索✨ &#x1f31f;引言 在网络编程中&#xff0c;HTTP协议无处不在。在Node.js的世界里&#xff0c;我们可以通过内置的http模块来轻松创建HTTP服务器和客户端&#xff0c;实现数据的接收和发送。今天就让我们一起打开这扇门&#xff0c;探索…

Fisher判别示例:鸢尾花(iris)数据(R)

先读取iris数据&#xff0c;再用程序包MASS&#xff08;记得要在使用MASS前下载好该程序包&#xff09;中的线性函数lda()作判别分析&#xff1a; data(iris) #读入数据 iris #展示数据 attach(iris) #用变量名绑定对应数据 library(MASS) #加载MASS程序包 ldlda(Species~…

Python打怪升级(4)

在计算机领域常常有说"合法"和"非法"指的是:是否合理&#xff0c;是否有效&#xff0c;并不是指触犯了法律。 random.randint(begin,end) 详细讲解一下这个random是指模板&#xff0c;也就是别人写好的代码直接来用&#xff0c;在Python当中&#xff0c;…

C语言入门课程学习笔记1

C语言入门课程学习笔记1 第1课 - 概论第2课 -helloworld第3课 -数据输出第4课 -数据类型与变量第5课 - 深入数据类型与变量第6课 - 类型与变量编程练习第7课 - 程序中的数据输入 本文学习自狄泰软件学院 唐佐林老师的 C语言入门课程&#xff0c;图片全部来源于课程PPT&#xff…

食用油5G智能工厂数字孪生可视化平台,推进食品制造业数字化转型

食用油5G智能工厂数字孪生可视化平台&#xff0c;推进食品制造业数字化转型。在食用油产业中&#xff0c;数字化转型已成为提升生产效率、优化供应链管理、确保产品质量和满足消费者需求的关键。食用油5G智能工厂数字孪生可视化平台作为这一转型的重要工具&#xff0c;正在推动…

《html自用使用指南》--基于w3School实践

1.基础标签 文本输入时&#xff0c;在编辑器中的换行&#xff0c;多个空格&#xff0c;都被编辑器看作一个空格 <p> 这个段落 在源代码 中 包含 许多行 但是 浏览器 忽略了 它们。 </p>结果&#xff1a;这个段落 在源代码 中 包含 许多行 但是 浏览器…

STM32H750时钟频率和功耗以及RTC功能测试

STM32H750时钟频率和功耗和RTC功能测试 &#x1f4cc;相关篇《STM32H750片外QSPI启动配置简要》 ✨在使用STM32CubeMX修改STM32H750时钟树参数时&#xff0c;如果使用软件自动求解&#xff0c;这是一个非常耗时的操作&#xff0c;有时候还不一定成功&#xff0c;还是推荐使用手…

《ElementPlus 与 ElementUI 差异集合》el-select 差异点,如:高、宽、body插入等

宽度 Element UI 父元素不限制宽度时&#xff0c;默认有个宽度 207px&#xff1b; 父元素有固定宽度时&#xff0c;以父元素宽度为准&#xff1b; Element Plus 父元素不限制宽度时&#xff0c;默认100%&#xff1b; 父元素有固定宽度时&#xff0c;以父元素宽度为准&#x…

CDN、边缘计算与云计算:构建现代网络的核心技术

在数字化时代&#xff0c;数据的快速传输和处理是保持竞争力的关键。内容分发网络&#xff08;CDN&#xff09;、边缘计算和云计算共同构成了现代互联网基础架构的核心&#xff0c;使内容快速、安全地到达用户手中。本文将探讨这三种技术的功能、相互关系以及未来的发展趋势。 …

使用表格法插入公式和编号

如何将公式和编号优雅地插入到论文当中呢&#xff1f; 首先插入一个1行2列的表格 调整一下 输入公式方法一&#xff1a;感觉墨迹公式挺好用的&#xff0c;word自带的 输入公式方法二&#xff1a;图片转LATEX代码 这个方法更快 分享一个公式识别网站 图片识别得到LATEX代码&…

atlas 500容器(ubuntu20.04)搭建

1.docker 及环境搭建略 2.宿主机驱动安装略 3.宿主机中能正确使用npu-smi 4.docker 拉取略 5.docker 容器启动 docker run -itd --device/dev/davinci0 --device/dev/davinci_manager --device/dev/devmm_svm --device/dev/hisi_hdc -v /run/board_cfg.ini:/run/b…

Pycharm远程连接实验室服务器Conda环境配置

如何配置Pycharm和远程服务器 这类博客较多&#xff0c;参考内容 https://blog.csdn.net/fengbao24/article/details/125515542 Python解释器选择&#xff08;conda3&#xff09; 1. Settings -> Add Interpreter -> On SSH 注意&#xff0c;这里的SSH需要在你把远程…

OpenHarmony南向开发案例:【 智能家居中控】

应用场景简介 智能家居。 今天打造的这一款全新智能家庭控制系统&#xff0c;凸显应用在智能控制和用户体验的特点&#xff0c;开创国内智能家居系统体验新局面。新的系统主要应用在鸿蒙生态。 工程版本 系统版本/API版本&#xff1a;OpenHarmony SDK API 8IDE版本&#xf…

c++的策略模式,就是多态

一、定义&#xff1a; 策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。 策略模式让算法独立于使用它的客户而独立变化。 二&#xff0c;核心 抽象策略&#xff08;抽象基类&#xff09;&#xff08;Strategy&#xff09…

酷开科技逐步为用户构建健全的智慧家庭生活场景

大规模与精细化人群技术则是通过大量的计算能力和精细化的运营能力&#xff0c;建立用户专属数据储存区域&#xff0c;使得用户在使用不同电视的观影偏好和兴趣能够能够得以延续。 不拘泥于自有品牌终端数量&#xff0c;酷开系统除了集成在创维电视上&#xff0c;还服务于飞利…

idea上传项目到gitee(码云)

1、打开码云&#xff0c;新建仓库 2、创建 3、这就是创建成功的页面 4、复制仓库地址&#xff0c;后面需要用到 2、打开我们的项目&#xff1a;例如我现在的项目 1、idea创建git仓库 2、选择我们项目文件夹的目录 3、查看文件是否变色&#xff0c;变色表示成功了 4、添加到缓…

0元实现网站HTTP升级到HTTPS(免费https证书)

HTTPS就是在HTTP的基础上加入了SSL&#xff0c;将一个使用HTTP的网站免费升级到HTTPS主要包括以下几个步骤&#xff1a; 1 获取SSL证书 永久免费的https证书申请通道https://www.joyssl.com/certificate/select/free.html?nid16 免费的SSL证书同样能实现HTTPS&#xff0c;国…

SpringBoot内容协商机制(就是接受数据的类型如json,xml)

目录 一、基于请求头的内容协商机制 二、基于请求参数的内容协商机制 一、基于请求头的内容协商机制 如果我们的Java服务为浏览器和安卓手机同时提供服务&#xff0c;浏览器期望接受的请求是JSON格式&#xff0c;安卓客户端期望接收的请求是XML格式&#xff0c;这个时候是否需…

C++中的智能指针

C中的智能指针 文章目录 C中的智能指针1.为什么需要智能指针&#xff1f;2.智能指针的类型2.1 std::shared_ptr2.2 std::unique_ptr2.3 std::weak_ptr Reference 笔者在学习ROS2的过程中&#xff0c;遇到了std::make_shared这种用法&#xff0c;一眼看不懂&#xff0c;才发现笔…