网盘——移动文件

本文主要讲解网盘文件操作部分的移动文件,具体步骤如下:

目录

1、实施步骤:

2、代码实现

2.1、在book里面添加移动文件的按钮

2.2、将他添加到界面

2.3、添加移动文件的槽函数

2.4、关联槽函数

2.5、在book中添加成员函数,保存要移动的文件名字

2.6、将路径和文件名拼接成一个访问路径

2.7、选择移动到那个文件夹里面去

A、添加按钮,选择移动到那个文件夹

B、添加到界面

C、添加移动文件目标目录槽函数

D、关联信号槽

E、添加槽函数定义

2.8、添加移动文件的协议

2.9、产生PDU,发送移动文件的请求

2.10、服务器收请求的case

2.11、服务器收到回复做显示

3、测试

3.1、打开图书,选择要移动的文件,先点击常规文件,点击移动文件按钮,目标目录按钮变亮,可以点击。

3.2、点击目标目录,报错。因为是常规文件 

3.3、将文件一定到aaa里面

3.4、点击aaa,目标目录


1、实施步骤:

A、客户端发送移动文件请求(请求包含当前目录,目标目录)

B、服务器接收请求之后,根据请求中指定的目录和目标目录进行移动,移动完成之后,回复客户端

C、客户端接收到回复信息之后,进行显示

2、代码实现

2.1、在book里面添加移动文件的按钮

    //移动文件QPushButton *m_pMoveFilePB;

2.2、将他添加到界面

    m_pMoveFilePB = new QPushButton("移动文件");pFileVBL->addWidget(m_pMoveFilePB);

展示界面

2.3、添加移动文件的槽函数

    //移动文件void MoveFile();

2.4、关联槽函数

   //关联移动文件槽函数connect(m_pMoveFilePB, SIGNAL(clicked(bool)),this, SLOT(moveFile()));

2.5、在book中添加成员函数,保存要移动的文件名字

    //保存要移动的文件名QString m_strMoveFileName;

2.6、将路径和文件名拼接成一个访问路径

    QString m_strMoveFilePath;

2.7、选择移动到那个文件夹里面去

A、添加按钮,选择移动到那个文件夹

    //选择要移动到那个文件夹QPushButton *m_pSelectDirPB;

B、添加到界面

    m_pMoveFilePB= new QPushButton("目标目录");//假如没有选择移动文件的话,将这个按键设置成灰的,选不了的m_pMoveFilePB->setEnabled(false);pFileVBL->addWidget(m_pSelectDirPB);

C、添加移动文件目标目录槽函数

    void selectDestDir();

D、关联信号槽

    //关联目标目录的槽函数connect(m_pSelectDirPB, SIGNAL(clicked(bool)),this, SLOT(selectDestDir()));

E、添加槽函数定义

void Book::selectDestDir()
{//选择要移动的文件QListWidgetItem *pCurItem = m_pBookListW->currentItem();if(NULL != pCurItem){//表示选择了一个文件//获得目的地路径QString strDestDir = pCurItem->text();//当前所在的路径QString strCurPath =  TcpClient::getinstance().curPath();//将路径和文件名拼接成一个访问的路径m_strDestDir = strCurPath+'/'+strDestDir;//选择移动到那个文件夹里面去//产生PDU,发送移动文件的请求int srclen = m_strMoveFilePath.size();int destlen = m_strDestDir.size();PDU *pdu = mkPDU(srclen+destlen+2);pdu->uiMsgType = ENUM_MSG_TYPE_MOVE_FILE_REQUEST;sprintf(pdu->caData,"%d %d %s", srclen, destlen, m_strMoveFileName.toStdString().c_str());memcpy(pdu->caMsg,m_strMoveFilePath.toStdString().c_str(),srclen);memcpy((char*)(pdu->caMsg)+(srclen+1), m_strDestDir.toStdString().c_str(),destlen);TcpClient::getinstance().getTcpSocket().write((char*)pdu,pdu->uiPDULen);free(pdu);pdu = NULL;}else {QMessageBox::warning(this, "移动文件", "请选择要移动的文件");}m_pSelectDirPB->setEnabled(false);
}

2.8、添加移动文件的协议

    ENUM_MSG_TYPE_MOVE_FILE_REQUEST, //移动文件请求ENUM_MSG_TYPE_MOVE_FILE_RESPOND, //移动文件回复

2.9、产生PDU,发送移动文件的请求

void Book::selectDestDir()
{//选择要移动的文件QListWidgetItem *pCurItem = m_pBookListW->currentItem();if(NULL != pCurItem){//表示选择了一个文件//获得目的地路径QString strDestDir = pCurItem->text();//当前所在的路径QString strCurPath =  TcpClient::getinstance().curPath();//将路径和文件名拼接成一个访问的路径m_strDestDir = strCurPath+'/'+strDestDir;//选择移动到那个文件夹里面去//产生PDU,发送移动文件的请求int srclen = m_strMoveFilePath.size();int destlen = m_strDestDir.size();PDU *pdu = mkPDU(srclen+destlen+2);pdu->uiMsgType = ENUM_MSG_TYPE_MOVE_FILE_REQUEST;sprintf(pdu->caData,"%d %d %s", srclen, destlen, m_strMoveFileName.toStdString().c_str());memcpy(pdu->caMsg,m_strMoveFilePath.toStdString().c_str(),srclen);memcpy((char*)(pdu->caMsg)+(srclen+1), m_strDestDir.toStdString().c_str(),destlen);TcpClient::getinstance().getTcpSocket().write((char*)pdu,pdu->uiPDULen);free(pdu);pdu = NULL;}else {QMessageBox::warning(this, "移动文件", "请选择要移动的文件");}m_pSelectDirPB->setEnabled(false);
}

2.10、服务器收请求的case

            //-----------------移动文件---------------case ENUM_MSG_TYPE_MOVE_FILE_REQUEST:{//两个路径大小char caFileName[32] = {'\0'};int srclen =0;int destlen =0;sscanf(pdu->caData, "%d%d%s", &srclen, &destlen, caFileName);//产生空间,将地址拷贝出来char *pSrcPath = new char[srclen+1];//+32从一个路径移动到另一个路径,移动时候必须在目的路径里面只当他的名字char *pDestPath = new char[destlen+1+32];memset(pSrcPath, '\0', srclen+1); //清空空间memset(pDestPath, '\0', destlen+1+32);memcpy(pSrcPath, pdu->caMsg, srclen);memcpy(pDestPath, (char*)(pdu->caMsg)+(srclen+1), destlen);PDU *respdu =mkPDU(0);respdu->uiMsgType = ENUM_MSG_TYPE_MOVE_FILE_RESPOND;QFileInfo fileinfo(pDestPath);if(fileinfo.isDir()){strcat(pDestPath, "/");strcat(pDestPath, caFileName);bool ret = QFile::rename(pSrcPath, pDestPath);if(ret){strcpy(respdu->caData, MOVE_FILE_OK);}else {strcpy(respdu->caData, COMMON_ERROR);}}else if (fileinfo.isFile()) {strcpy(respdu->caData, MOVE_FILE_FAILED);}write((char*)respdu, respdu->uiPDULen);free(respdu);respdu=NULL;break;}

2.11、服务器收到回复做显示

         //---------------------移动文件------------------------case ENUM_MSG_TYPE_MOVE_FILE_RESPOND:{QMessageBox::information(this,"移动文件",pdu->caData);break;}

3、测试

3.1、打开图书,选择要移动的文件,先点击常规文件,点击移动文件按钮,目标目录按钮变亮,可以点击。

3.2、点击目标目录,报错。因为是常规文件 

3.3、将文件一定到aaa里面

3.4、点击aaa,目标目录

成功,在文件目录里面查看一下

刚开始test.txt在jack文件夹下

现在在aaa下面

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

4、到此,所有的关于网盘的操作都已经结束了,大家如果感兴趣的话,可以看我之前的文章哦!!!!!!!后续我整理一下,会将代码上传的

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

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

相关文章

【opencv4.8.1 源码编译】windows10 OpenCV 4.8.1源码编译并实现 CUDA 12加速

Windows 下使用 CMake3.29.2 Visual Studio 2022 编译 OpenCV 4.8.1 及其扩展模块cuda12.0teslaT4显卡 记录自己在编译时踩过的坑,避免下次再犯或者给有需要的人。 在实际使用中,如果是对处理时间要求比较高的场景,使用OpenCV处理图片数据很…

锂电池SOH预测 | 基于CNN的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

微图乐 多种装B截图一键制作工具(仅供娱乐交流)

软件介绍 采用exe进程交互通信。全新UI界面,让界面更加清爽简约。支持zfb、VX、TX、Yin行、Dai款、游戏等图片生成,一键超清原图复制到剪辑板,分享给好友。适用于提高商家信誉度,产品销售额度。装逼娱乐,用微图乐。图…

数据结构(十)----图

目录 一.图的概念 1.图的定义 2.图的类别 3.图的性质 4.几种特殊形态的图 二.图的存储结构 1.邻接矩阵(顺序存储) 2.邻接表(顺序链式存储) 3.十字链表 4.邻接多重表 四.图的遍历 1.广度优先遍历(BFS&#…

STM32 F103C8T6学习笔记17:类IIC通信(SMBus协议)—MLX90614红外非接触温度计

今日学习配置MLX90614红外非接触温度计 与 STM32 F103C8T6 单片机的通信 文章提供测试代码讲解、完整工程下载、测试效果图 本文需要用到的大概基础知识:1.3寸OLED配置通信显示、IIC通信、 定时器配置使用 这里就只贴出我的 OLED驱动方面的网址链接了&#xff1a…

Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点 关键类&#xff1a;QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…

3.【Orangepi Zero2】超声模块ultrasonic(HC-SR04)

超声模块ultrasonic&#xff08;HC-SR04&#xff09; HC-SR04 超声波距离传感器如何工作&#xff1f;程序实现初始化超声波启动超声波获取距离整合代码 HC-SR04 超声波距离传感器如何工作&#xff1f; 当Trig引脚设置为高电平达 10s 时&#xff0c;超声波距离传感器开始工作。…

Spring - 9 ( 10000 字 Spring 入门级教程 )

一&#xff1a; MyBatis XML 配置文件 Mybatis 的开发有两种方式&#xff1a; 注解XML 我们已经学习了注解的方式, 接下来我们学习 XML 的方式 MyBatis XML 的方式需要以下两步: 配置数据库连接字符串和 MyBatis写持久层代码 1.1 配置连接字符串和 MyBatis 此步骤需要进…

InfiniFlow 創始人兼CEO張穎峰確認出席“邊緣智能2024 - AI開發者峰會”

隨著AI技術的迅猛發展&#xff0c;全球正逐步進入邊緣計算智能化與分布式AI深度融合的新時代&#xff0c;共同書寫著分布式智能創新應用的壯麗篇章。邊緣智能&#xff0c;作為融合邊緣計算和智能技術的新興領域&#xff0c;正逐漸成為推動AI發展的關鍵力量。借助分布式和去中心…

C++ 函数 参数与返回值

#一 参数与返回值 回顾文件读数据功能 文件读数据 1函数参数传值调用过程 将函数调用语句中的实参的一份副本传给函数的型材。 简单的值的传递&#xff0c;实参的值没有发生变化。 2 函数参数传值调用过程 传地址调用 将变量的地址传递给函数的形参 形参和实参指向了同…

C语言 基本数据类型及大小

一、基本数据类型 1.整型int 整型的关键字是int&#xff0c;定义一个整型变量时&#xff0c;只需要用int来修饰即可。也分为短整型和长整型。 2.浮点型 浮点型又分单精度浮点型float和双精度浮点型double。 3.字符型char 前面的整型和浮点型都是用于存放数字。字符型&…

docker部署nginx并实现https

文章目录 docker部署nginx并实现https1、服务器环境2、安装docker3、准备证书4、准备nginx配置文件和dockerfile文件5、创建nginx镜像与容器6、验证访问 docker部署nginx并实现https 1、服务器环境 [rootliuyanfen12 ~]#systemctl stop firewalld [rootliuyanfen12 ~]#setenf…

【c++】继承学习(二):探索 C++ 中派生类的默认机制与静态成员共享

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 目录 1.派生类的默认成员函数2.继承与友元3.继承与静态成员 朋友们大家好&#xff0c;本篇文章我们来学习继承的第二部分 1.派生类的默认成员函数 来看下面的类&#xff1a; class Person…

Delta lake with Java--分区表

今天尝试一下将昨天的数据操作建立的表换成分区表&#xff0c;参考Delta Lake Up and Running做法用分区表的方式来更新数据。还要比较一下分区表的查询与非分区表的查询&#xff0c;结果显示分区表的查询速度要比非分区表要快。直接上代码&#xff1a; import io.delta.table…

发表博客之:transformer 架构 推理时候运算流程详细讲解,以及变长推理支持,小白都可以看得懂,AI推理工程师必备技能!

文章目录 [发表博客之&#xff1a;transformer 架构 推理时候运算流程详细讲解&#xff0c;以及变长推理支持&#xff0c;小白都可以看得懂&#xff0c;AI推理工程师必备技能&#xff01;](https://cyj666.blog.csdn.net/article/details/138439826)总结一下高性能变长推理 发表…

定点乘除法

目录 一、定点乘法 1.串行乘法器 2.并行乘法器 二、定点除法 1.笔算除法 2.机器除法 一、定点乘法 1.串行乘法器 1.符号位单独处理&#xff0c;两数的符号位按异或运算得到&#xff0c;而乘积的数值部分则是两个正数相乘之积。 2.过程 &#xff08;1&#xff09; 由乘…

「2024年」前端开发常用工具函数总结 TypeScript

前言 在前端开发中&#xff0c;工具函数是提高代码复用率、保持代码整洁和增加开发效率的关键。使用 TypeScript 编写工具函数不仅可以帮助开发者捕捉到更多的类型错误&#xff0c;还可以提供更清晰的代码注释和更智能的代码补全。下面是一些在 TypeScript 中常用的前端开发工…

Java如何获取当前日期和时间?

Java如何获取当前日期和时间&#xff1f; 本文将为您介绍 Java 中关于日期和时间获取的方法&#xff0c;以及介绍 Java 8 中获取日期和时间的全新API。 1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取&#xff0c;此方法优势是…

【C语言】详解预处理

、 最好的时光&#xff0c;在路上;最好的生活&#xff0c;在别处。独自上路去看看这个世界&#xff0c;你终将与最好的自己相遇。&#x1f493;&#x1f493;&#x1f493; 目录 •✨说在前面 &#x1f34b;预定义符号 &#x1f34b; #define • &#x1f330;1.#define定义常…

ControlNet官方资源链接【ControlNet论文原文】【持续更新中~】

ControlNet官方资源链接 ControlNet论文原文&#xff1a;https://arxiv.org/abs/2302.05543ControlNet官方GitHub&#xff1a;https://github.com/lllyasviel/ControlNetControlNet 1.1官方GitHub&#xff1a;https://github.com/lllyasviel/ControlNet-v1-1-nightlyControlNe…