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