网盘——移动文件

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

目录

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.xdnf.cn/news/1411389.html

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

相关文章

Typescript语法二

继承 继承是⾯向对象编程中的重要机制,允许⼀个类(⼦类或派⽣类)继承另⼀个类(⽗类或基类)的属性和⽅法。⼦类可以直接使⽤⽗类的特性,并根据需要添加新的特性或覆盖现有的特性。这种机制赋予⾯向对象程序良…

ApiHug 官方站点

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplacehttps://…

《我不是潘金莲》读后感

《我不是潘金莲》这本书是在一家旧书店里面淘的,在返程的车上就已经看得差不多了,回宿舍后又花了一点点时间一口气看完了,整本书花了不到两个小时,算得上速战速决!这本书的作者刘震云的大名可谓如雷贯耳,他…

IntelliJ IDEA 的Java注释模板如何配置

一、增加注释模板 1、首先打开 IDEA 设置 Settings…(Windows 快捷键:Ctrl Alt S,Mac 快捷键:command ,)—> Editor —> Live Templates —> 点击右侧加号 params groovyScript("def result; def st…

笔试狂刷--Day12(模拟 + 链表的公共节点 + dp)

大家好,我是LvZi,今天带来笔试狂刷--Day12(模拟 链表的公共节点 dp) 一.删除公共字符(哈希) 题目链接:删除公共字符(哈希) 分析: 分别读取俩个字符串,将第二个字符串存储到set之中,再遍历第一个字符串,删除公共字符 代码: …

【nginx 开发】nginx安装,Nginx介绍

Nginx基础介绍 Nginx反向代理负载均衡动静分离 Nginx的安装NginxNginx常用命令Nginx配置文件 Nginx Nginx是一个高性能的Http和反向代理服务器,特点是占有内存少,并发能力强,Nginx可以作为静态页面的web服务器,Nginx专为性能优化…

LWIP+TCP客户端

一、TCP API函数 其中tcp_poll()函数的第三个参数表示隔几秒调用一次这个周期性函数 二、修改服务器的IP 三、TCP客户端编程思路 申请套接字绑定服务器IP和端口号等待客户端连接 进入连接回调函数在连接回调函数中 配置一些回调函数,如接收回调函数,周期…

07 - 步骤 javaScript代码

简介 JavaScript 代码是通过 JavaScript 脚本步骤来执行 JavaScript 脚本的一种方式。这允许用户在 Kettle 的数据流程中使用 JavaScript 编写自定义的脚本逻辑,用于数据处理、转换、计算等操作。 使用 场景 我需要在数据流加一个字段 createTime 当前时间&…

组队竞赛和删除公共字符

这里附上两个题目的链接 题目一:删除公共字符_牛客题霸_牛客网 (nowcoder.com) 题目二:组队竞赛_牛客笔试题_牛客网 (nowcoder.com) 第一题 分析: 当我们看见这个题目的时候,可以使用传统的暴力查找方式,如判断第一个…

Kettle连接Mysql数据库时报错——Driver class ‘org.gjt.mm.mysql.Driver‘ could not be found

一、问题描述 当我们使用ETL工具Kettle需要连接Mysql数据库进行数据清洗操作,在配置好Mysql的连接串内容后,点击【测试】按钮时报错【错误连接数据库 [MysqlTestConnection] : org.pentaho.di.core.exception.KettleDatabaseException: Error occurred while trying to conne…

【Python编程实践1/3】模块

目录 目标 模块 import ​编辑 代码小结 题目 from...import 随机模块 代码小结 randint函数 骰子大战 choice函数 总结 目标 拧一颗螺丝,只会用到螺丝刀;但是修一台汽车,需要一整套汽修的工具。函数就像螺丝刀,可以帮…

324. 摆动排序 II

324. 摆动排序 II 原题链接:完成情况:解题思路:参考代码:_324摆动排序II_使用额外空间 原题链接: 324. 摆动排序 II. https://leetcode.cn/problems/wiggle-sort-ii/solutions/1627858/bai-dong-pai-xu-ii-by-leetc…

Jetson orin nano通过串口进入boot模式

引言:目前的国产底板由于做工问题,可能会出现在启动过程中不能正常识别键盘和鼠标,只能采用串口方式进入boot模式。 1.如图所示,使用ttl转usb模块连接主控到电脑usb口。 2.打开putty工具,使用串口连接,选择…

​【收录 Hello 算法】2.4 空间复杂度(常数阶、线性阶、平方阶、指数阶、对数阶)

目录 2.4 空间复杂度 2.4.1 算法相关空间 2.4.2 推算方法 2.4.3 常见类型 1. 常数阶 𝑂(1) 2. 线性阶 𝑂(𝑛) 3. 平方阶 𝑂(𝑛2) 4. 指数阶 𝑂(2𝑛) 5. 对数阶 &…

foobar2000 for Mac:卓越音乐播放器

当您在寻找一款音质卓越、功能丰富的音频播放器时,foobar2000 for Mac无疑是您的首选。它拥有简洁明了的界面设计,易于上手,同时支持多种音频格式,让您无需担心兼容性问题。 foobar2000 for Mac v2.6.4免激活版下载 foobar2000 fo…

nginx--平滑升级

失败了,等我拍好错继续更新 命令 选项说明 帮助: -? -h 使用指定的配置文件: -c 指定配置指令:-g 指定运行目录:-p 测试配置文件是否有语法错误:-t -T 打印nginx的版本信息、编译信息等:-v -V 发送信号: -s 示例: nginx -s reload 信号说明 立刻停止服务:stop,相…

4个可将 iPhone iPad iPod 修复至正常状态的 iOS 系统恢复软件

许多iOS用户对操作系统问题感到恐慌,例如iPhone卡在恢复模式、白屏死机、黑屏死机、iOS系统损坏、iTunes连接屏幕、iPhone数据丢失等。这些状态通常很无聊,因为您无法使用 iPhone 执行任何操作。 4个可将 iPhone iPad iPod 修复至正常状态的 iOS 系统恢复…

论文辅助笔记:Tempo之modules/lora.py

1 LoRALayer 基类 2 Linear 2.1 __init__ 2.2 reset_parameter & train 2.3 forward 3 MergeLinear 3.1__init__ enable_lora指定了哪些输出特征使用lora 3.2 reset_parameters & zero_pad & merge_AB 3.3 train & forward

Redis-五大数据类型-String(字符串)

Redis数据类型 key键 keys * 查看当前库中所有的key 。 exists key 判断某个key是否存在。 可以设置多个key,只返回存在的个数,但不返回哪一个存在/不存在。 exists k1 查看k1是否存在,如果存在返回1 exists k1 k2 k3 查看k1 k2 k3是否存在&…

域信息搜集简单总结

判断域 net time /domain net user /domain net view /domain net config workion查询当前登录域及登录用户信息 找到域 ping 域主机名 即可得到域管理员的IP地址 BloodHound内网渗透分析工具 内网渗透工具bloodhound安装及使用_bloodhound使用-CSDN博客 BloodHou…