本文主要讲解网盘中文件操作部分的删除常规文件部分,具体实施步骤如下:
目录
1、具体步骤:
2、代码实现
2.1、添加删除常规文件的协议
2.2、添加删除常规文件槽函数
2.3、关联槽函数
2.4、添加槽函数定义
2.5、服务器回复
2.6、客户端接收信息,显示
3、测试
3.1、删除常规文件
编辑
3.2、删除目录
1、具体步骤:
A、客户端发送删除请求(包含目录信息和要删除的文件名)
B、服务器接收请求之后,将请求中的目录及文件名提取出来,删除指定的文件,并将删除结果发送回复给客户端
C、客户端接收到回复信息之后,进行显示
2、代码实现
2.1、添加删除常规文件的协议
ENUM_MSG_TYPE_DELETE_FILE_REQUEST, //删除常规文件请求
ENUM_MSG_TYPE_DELETE_FILE_RESPOND, //删除常规文件回复
2.2、添加删除常规文件槽函数
//删除常规文件
void delRegeFile();
2.3、关联槽函数
//关联删除常规文件槽函数
connect(m_pDelFilePB, SIGNAL(clicked(bool)),
this, SLOT(delRegeFile()));
2.4、添加槽函数定义
void Book::delRegeFile()
{
//获得当前所在的目录
QString strCurPath = TcpClient::getinstance().curPath();
//获得点击删除的文件
QListWidgetItem *pItem = m_pBookListW->currentItem();
//判断
if(NULL==pItem)
{
QMessageBox::warning(this,"删除文件","请选择要删除的文件");
}
else
{
//列表上面的文件名称
QString strDelName = pItem->text();
//路径太长了,放在caMsg里面,名字就放在caData里面
PDU *pdu =mkPDU(strCurPath.size()+1);
pdu->uiMsgType=ENUM_MSG_TYPE_DELETE_FILE_REQUEST;
strncpy((char*)(pdu->caData),strDelName.toStdString().c_str(),strDelName.size());
memcpy(pdu->caMsg,strCurPath.toStdString().c_str(),strCurPath.size());
//发送给服务器
TcpClient::getinstance().getTcpSocket().write((char*)pdu,pdu->uiPDULen);
free(pdu);
pdu=NULL;
}
}
2.5、服务器回复
//------------删除常规文件--------------------------
case ENUM_MSG_TYPE_DELETE_FILE_REQUEST:
{
//拼接路径
char caName[32] = {'\0'};
strcpy(caName,pdu->caData);
//产生一块空间,将传过来的路径拷贝出来
char *pPath = new char[pdu->uiMsgLen];
memcpy(pPath,pdu->caMsg,pdu->uiMsgLen);
//拼接成一条完整的路径
QString strPath = QString("%1/%2").arg(pPath).arg(caName);
//验证
// qDebug()<<strPath;
QFileInfo fileInfo(strPath);
bool ret = false;
if(fileInfo.isDir())
{//是个文件夹,就不删除了
ret =false;
}
else if(fileInfo.isFile())
{//常规文件,删除
QDir dir;
//与删除目录的方式不一样哦
ret = dir.remove(strPath);
}
PDU *respdu =NULL;
if(ret)
{
//删除成功
respdu=mkPDU(strlen(DELETE_FILE_OK)+1);
respdu->uiMsgType=ENUM_MSG_TYPE_DELETE_FILE_RESPOND;
memcpy(respdu->caData,DELETE_FILE_OK,strlen(DELETE_FILE_OK));
}
else {
//删除失败
respdu=mkPDU(strlen(DELETE_FILE_FAILED)+1);
respdu->uiMsgType=ENUM_MSG_TYPE_DELETE_FILE_RESPOND;
memcpy(respdu->caData,DELETE_FILE_FAILED,strlen(DELETE_FILE_FAILED));
}
//发送
write((char*)respdu, respdu->uiPDULen);
free(respdu);
respdu =NULL;
break;
}
2.6、客户端接收信息,显示
//---------------------删除常规文件------------------------
case ENUM_MSG_TYPE_DELETE_FILE_RESPOND:
{
QMessageBox::information(this,"删除常规文件",pdu->caData);
break;
}
3、测试
3.1、删除常规文件
3.2、删除目录
成功!!!!!!!!!!!!