网盘——移动文件

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

目录

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,一经查实,立即删除!

相关文章

全量知识系统 程序详细设计 之 “Component总线结构” (QA百度文库)

Q1. 今天想聊聊 全量知识系统(以下简称全知系统)中的 “Component总线结构” 全量知识系统,即全知系统,是一个综合性的平台,旨在整合、处理和应用各类知识。在这个系统中,“Component总线结构”是一个核心…

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

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

经济法期末考试题

《经济法》期末大作业 开卷 班级 管院金融学辅修(24春) 姓名 学号 答案请写在后边答题纸上 题目 一 二 三 总分 成绩 名词解释(每小题5分,8小题,共40分) 经济法…

什么是Dos攻击和DDos攻击了?

Dos攻击就是一个计算机进行攻击,一个计算机发出多次请求和获取资源等请求,从而使得服务器的资源都用于处理这个计算机发出的请求了,没有资源被其他用户服务了,甚至可能直接导致服务器崩溃了 DDos攻击就是和Dos攻击的区别就是其攻击升级了,不再是一台计算机,而是被病毒感染的多台…

锂电池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;超声波距离传感器开始工作。…

IP 寻址与地址解析

目录 前言 1.IP 分类地址 2.IP 子网与超网 3.组成 IP 超网 4.无类地址与 CIDR 5.配置管理 6.地址解析 总结 前言 在互联网协议 (IP) 的世界中&#xff0c;寻址和地址解析是关键概念。它们使设备能够在互联网上唯一地标识和相互通信。让我们深入了解 IP 寻址、子网、超网…

Lua基础学习

目录 ->[[…/目录|目录]] 基础 注释 -- 单行注释--[[ 多行注释 多行注释 ]]输出 print("hello world") -- echo:hello world变量 类型 数据类型描述nil表示一个无效值&#xff08;在条件表达式中相当于false&#xff09;。booleanfalse和true。number表示双…

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 函数参数传值调用过程 传地址调用 将变量的地址传递给函数的形参 形参和实参指向了同…

【Unity Shader入门精要 第3章】Unity Shader基础

1. Unity提供的四种shader模板 Standard Surface Shader&#xff1a;unity自己创建的shader类型&#xff0c;提供了基本的光照处理逻辑&#xff0c;使用者不需要自己实现vertext/fragment着色器&#xff0c;只要指定光照模型&#xff0c;unity会自动编译生成对应的vertext/fra…

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…

Django框架之模板层

一、模版语法 1、模版初识 &#xff08;1&#xff09;语法 {{ }}: 变量相关 {% %}: 逻辑相关 &#xff08;2&#xff09;变量 ① 传值 在Django的模板语言中按此语法使用&#xff1a; {{ 变量名 }}。 当模版引擎遇到一个变量&#xff0c;它将计算这个变量&#xff0c;然…