网盘——查看文件

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

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://xiahunao.cn/news/2980932.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于小程序实现的查寝打卡系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;ssm 【…

Esp32-S3 进行JSON解析

之前介绍了esp32-s3的http通信,对于返回的结果进行解析也是必须的,通常我们可以使用json格式进行通信,这样即便于理解也便于取值。今天我们介绍下JSON解析。 在这里用到的库是ujson,代码如下,将如下代码保存到设备即可 import micropython import json from json import …

S-Edge网关:柔性部署,让物联网接入更统一

S-Edge网关是什么&#xff1f; 网关是在实际物理世界与虚拟网络世界相连接的交叉点&#xff0c;为了让这个交叉点尽可能的复用&#xff0c;无需每种设备都配套一种连接方式&#xff0c;边缘网关主要就是用于传感器等物理设备与网络实现数据交互的通用设备&#xff0c;也称为物…

【简单讲解下如何学习C++】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Windows10如何关闭Edge浏览器的Copilot

在Windows10更新后&#xff0c;打开Edge浏览器&#xff0c;无论复制什么内容&#xff0c;都会弹出Copilot人工智能插件&#xff0c;非常令人反感&#xff0c;网上搜索的关闭方法都非常麻烦&#xff0c;比如&#xff1a;组策略和注册表。自己摸索得出最简便有效的关闭方法。 1、…

Shadowsocks PAC模式自定义规则

Shadowsocks PAC模式自定义规则 关键词&#xff1a;Shadowsocks, PAC自动模式, 编辑PAC用户自定规则, PAC规则 Shadowsocks使用PAC自动模式时&#xff0c;访问一个网站要不要走代理&#xff0c;需要用户手动进行干预。 编辑PAC规则 点击菜单栏shadowsocks图标&#xff0c;在…

【网络安全】HTTP协议 — 基础

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 学习目标​ 一、万维网的诞生与发展​编辑 1.万维网的诞生与发展 2.HTTP协议诞生与发展 二、网络基础 1.TCP/IP分层传输 1&#xff09;TCP/IP协议 2&#xff09;封装与拆封 …

云计算中的过度授权:安全隐患与应对策略

云计算凭借其弹性、可扩展等优势&#xff0c;已经成为诸多企业组织拓展业务的重要基础设施之一。然而&#xff0c;与传统IT架构相比&#xff0c;云计算环境的安全管理也面临着新的挑战。过度授权 (Overprivileging) 便是云安全领域亟待解决的主要问题之一&#xff0c;本文将带领…

mysql download 2024

好久没在官网下载 mysql server 安装包。今天想下载发现&#xff1a; 我访问mysql官网的速度好慢啊。mysql server 的下载页面在哪里啊&#xff0c;一下两下找不到。 最后&#xff0c;慢慢悠悠终于找到了下载页面&#xff0c;如下&#xff1a; https://dev.mysql.com/downlo…

OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介&#xff1a; 花名&#xff1a;洪波&#xff0c;OceanBase 数据库解决方案架构师&#xff0c;目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导&#xff0c;曾就职于互联网大厂和金融科技公司&#xff0c;主导过多项数据库升级、迁移、国产化…

uniapp APP检测更新

需求&#xff1a; 1.首次进入APP给出弹窗提示是否存在最新版本APP&#xff0c;可选择更新或者取消 2.选择取消后&#xff0c;在使用期间不再弹出该弹窗 3.在设置中增加按钮&#xff0c;点击进行版本检测&#xff0c;再弹窗 效果图&#xff1a; 使用到的插件&#xff1a;APP升…

消灭AI“耗电巨兽”?暴雨服务器推出液冷节能降耗算力方案

在科技飞速发展的今天&#xff0c;人工智能已成为驱动未来的重要力量。随着AI及大模型技术的进一步普及和应用场景的拓宽&#xff0c;相关算力需求呈指数级增长&#xff0c;大规模的AI训练和推理过程均需消耗大量电力&#xff0c;如同一个巨大的电力黑洞&#xff0c;吞噬着海量…

鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)

概述 OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力&#xff0c;包含I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。本文介绍如何通过调用OpenHarmony的NDK接口&#xff0c;实现对GPIO控制&#xff0c;达到LED闪烁的效果。其他的IOT外设控制&#xff0…

【iOS开发】(五)react Native路由和导航20240421-22

【iOS开发】(五)react Native 路由和导航Navigation 20240421 在&#xff08;一&#xff09;&#xff08;二&#xff09;中我们 Reactnative搭建了开发环境、学习了 基础语法、状态管理&#xff0c;JSX、组件、状态和生命周期以及样式布局等。 在&#xff08;三&#xff09;&a…

【LeetCode】---118.杨辉三角

一、题目解析&#xff1a; 二、知识回顾&#xff1a; 1.二维数组&#xff1a; 2. C语言中的二维数组访问方式和vector二维数组的访问&#xff0c; 不同区别&#xff1a; &#xff08;1&#xff09;表面是一样的&#xff0c;但底层不同&#xff01; &#xff08;2&#xff09;静…

用户请求经过哪些处理(公网)

DNS服务器之间协作&#xff1a; 递归DNS查询&#xff1a;用户的请求首先发送到递归DNS服务器。 查询根DNS服务器&#xff1a;递归DNS服务器查询根DNS服务器&#xff0c;以找到管理.com顶级域的TLD DNS服务器。 查询TLD DNS服务器&#xff1a;根DNS服务器响应带有TLD DNS服务器…

人工智能时代的关键技术:深入探索向量数据库及其在AI中的应用

文章目录 1. 理解向量数据库&#xff1a;二维模型示例2. 向量数据库中的数据存储与检索3. 向量数据库如何工作&#xff1f;4. 向量数据库如何知道哪些向量相似&#xff1f; 在人工智能技术日益成熟的当下&#xff0c;向量数据库作为处理和检索高维数据的关键工具&#xff0c;对…

uniapp中vue写微信小程序的生命周期差别

根据uniapp官网里的生命周期&#xff0c;感觉不太对劲&#xff0c;就自己测试了几个&#xff0c;发现有所差别。 红字数字 为 实际测试生命周期顺序。 因为需要页面传参 后再 初始化数据&#xff0c;而onLoad(option)接收参数后&#xff0c;就已经过了create()了&#xff0c;所…

【目标检测】YOLOv7 网络结构(与 YOLOv4,YOLOv5 对比)

YOLOv7 和 YOLOv4 Neck 与 Head 结构对比 其实 YOLOv7 的网络结构网上很多文章已经讲得很清除了&#xff0c;网络结构图也有非常多的版本可供选择&#xff0c;因为 YOLOv7 和 YOLOv4 是一个团队的作品&#xff0c;所以在网络结构方面&#xff0c; YOLOv7 和 YOLOv4 有很多相似…

Amazon云计算AWS之[3]简单存储对象S3

文章目录 S3的基本概念和操作桶对象基本操作 S3的数据一致性模型基知&#xff1a;CAP理论S3的最终一致性 S3的安全措施身份认证&#xff08;Authentication&#xff09;访问控制列表&#xff08;ACL&#xff09;访问控制策略(ACP)授权用户类型 S3的基本概念和操作 简单存储服务…