文件重命名具体步骤如下:
目录
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、点击重命名文件
成功