文件重命名具体步骤如下:
目录
A、客户端发送重命名请求(包含目录信息,要修改的文件名以及新文件名)
B、服务器收到请求之后,根据该请求中的目录信息以及新旧文件名字,对文件进行重命名,并回复到客户端
C、客户端收到回复信息之后,对该信息进行显示,通知用户重命名成功或者失败
- //重命名文件夹
- void renameFile();
connect(m_pRenamePB,SIGNAL(clicked(bool)), this, SLOT(renameFile()));
- ENUM_MSG_TYPE_RENAME_FILE_REQUEST, //重命名文件请求
- ENUM_MSG_TYPE_RENAME_FILE_RESPOND, //重命名文件回复
- 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,"重命名文件","新文件名不能为空");
- }
-
- }
- }
- 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;
- }
- //---------------------重命名文件------------------------
- case ENUM_MSG_TYPE_RENAME_FILE_RESPOND:
- {
- QMessageBox::information(this,"重命名文件",pdu->caData);
- break;
- }
成功