网盘——文件重命名

本文介绍了在IT技术背景下,通过客户端和服务器交互实现文件重命名的具体步骤,包括发送请求、服务器处理和响应、以及客户端接收和显示结果的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件重命名具体步骤如下:

目录

1、具体步骤

2、代码实现

2.1、添加重命名文件的槽函数

2.2、关联重命名文件夹信号槽

2.3、添加重命名文件的协议

2.4、添加槽函数定义

2.5、服务器

2.6、添加重命名文件的case

2.7、客户端接收回复

3、测试

3.1、点击重命名文件


1、具体步骤

A、客户端发送重命名请求(包含目录信息,要修改的文件名以及新文件名)

B、服务器收到请求之后,根据该请求中的目录信息以及新旧文件名字,对文件进行重命名,并回复到客户端

C、客户端收到回复信息之后,对该信息进行显示,通知用户重命名成功或者失败

2、代码实现

2.1、添加重命名文件的槽函数

    //重命名文件夹
    void renameFile();

2.2、关联重命名文件夹信号槽

    connect(m_pRenamePB,SIGNAL(clicked(bool)), this, SLOT(renameFile()));

2.3、添加重命名文件的协议

    ENUM_MSG_TYPE_RENAME_FILE_REQUEST,  //重命名文件请求
    ENUM_MSG_TYPE_RENAME_FILE_RESPOND,  //重命名文件回复

2.4、添加槽函数定义

void Book::renameFile()
{
    //获得当前所在的目录
    QString strCurPath = TcpClient::getinstance().curPath();
    //获得点击重命名的文件
    QListWidgetItem *pItem =  m_pBookListW->currentItem();
    //判断
    if(NULL==pItem)
    {
        QMessageBox::warning(this,"重命名文件","请选择要重命名的文件");
    }
    else
    {
        //获得旧的文件名字
        QString strOldName = pItem->text();
        //获得新的的文件名字
        QString strNewName = QInputDialog::getText(this,"重命名文件","请输入新的文件名");
        if(!strNewName.isEmpty())
        {
            //存放
            //路径太长了,放在caMsg里面,名字就放在caData里面
            PDU *pdu =mkPDU(strCurPath.size()+1);
            pdu->uiMsgType=ENUM_MSG_TYPE_RENAME_FILE_REQUEST;
            strncpy(pdu->caData,strOldName.toStdString().c_str(),strOldName.size());
            strncpy(pdu->caData+32,strNewName.toStdString().c_str(),strNewName.size());
            memcpy(pdu->caMsg,strCurPath.toStdString().c_str(),strCurPath.size());

            //发送给服务器
            TcpClient::getinstance().getTcpSocket().write((char*)pdu,pdu->uiPDULen);
            free(pdu);
            pdu=NULL;
        }
        else {
            QMessageBox::warning(this,"重命名文件","新文件名不能为空");
        }

    }
}

2.5、服务器

2.6、添加重命名文件的case

    case ENUM_MSG_TYPE_RENAME_FILE_REQUEST:
    {
        char caOldName[32] = {'\0'};
        char caNewName[32] = {'\0'};
        strncpy(caOldName,pdu->caData,32);
        strncpy(caNewName,pdu->caData+32,32);
        //产生一块空间,将传过来的路径拷贝出来
        char *pPath = new char[pdu->uiMsgLen];
        memcpy(pPath,pdu->caMsg,pdu->uiMsgLen);
        //拼接成新旧两条路径
        QString strOldPath = QString("%1/%2").arg(pPath).arg(caOldName);
        QString strNewPath = QString("%1/%2").arg(pPath).arg(caNewName);
        qDebug()<<strOldPath;
        qDebug()<<strNewPath;
        QDir dir;
        bool ret =  dir.rename(strOldPath,strNewPath);
        PDU *respdu = mkPDU(0);
        respdu->uiMsgType=ENUM_MSG_TYPE_RENAME_FILE_RESPOND;
        if(ret)
        {
            //重命名成功
            memcpy(respdu->caData,RENAME_FILE_OK,strlen(RENAME_FILE_OK));
        }
        else {
            //重命名失败
             memcpy(respdu->caData,RENAME_FILE_FAILED,strlen(RENAME_FILE_FAILED));
        }
        //发送
        write((char*)respdu, respdu->uiPDULen);
        free(respdu);
        respdu =NULL;
        break;
    }

2.7、客户端接收回复

        //---------------------重命名文件------------------------
    case ENUM_MSG_TYPE_RENAME_FILE_RESPOND:
    {
        QMessageBox::information(this,"重命名文件",pdu->caData);
        break;
    }

3、测试

3.1、点击重命名文件

成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值