本文主要讲解网盘里面关于文件操作部分的返回上一级,具体步骤如下
1、实施步骤:
A、客户端返回上一级功能的时候,我们首先检查是否是在根目录,如果在根目录则直接返回失败,反之则返回上一级。
B、假如是在某个子目录里面,客户端发送返回上一级请求(包含上一级目录信息,原因是获得上一级的文件信息)
C、服务器收到请求之后,将上一级目录中的文件名发送给客户端,这块就和刷新是一样的
D、客户端接收回复信息并显示
2、代码实现
2.1、添加返回上一级的函数
//返回上一级
void returnPre();
2.2、关联槽函数
//关联返回上一级信号槽
connect(m_pReturnPB,SIGNAL(clicked(bool)),
this, SLOT(returnPre()));
2.3、添加槽函数定义
测试
void Book::returnPre()
{
//判断当前目录是不是顶层目录
QString strCurPath = TcpClient::getinstance().curPath();
QString strRootPath = "./"+TcpClient::getinstance().loginName();
if(strCurPath==strRootPath)
{
QMessageBox::warning(this, "返回上一级","返回失败,已经在最开始的文件夹目录中!");
}
else {
}
}
2.4、定义一个当前路径函数
//返回上一级定义当前路径
void setCurPath(QString strCurPath);
void TcpClient::setCurPath(QString strCurPath)
{
m_strCurPath = strCurPath;
}
2.5、添加返回上一级函数定义
void Book::returnPre()
{
//判断当前目录是不是顶层目录
QString strCurPath = TcpClient::getinstance().curPath();
QString strRootPath = "./"+TcpClient::getinstance().loginName();
if(strCurPath==strRootPath)
{
QMessageBox::warning(this, "返回上一级","返回失败,已经在最开始的文件夹目录中!");
}
else
{
// "./aa/bb/cc" -----> "./aa/bb"
int index = strCurPath.lastIndexOf('/');
strCurPath.remove(index,strCurPath.size()-index);
qDebug()<<"return-->"<<strCurPath;
//将新的路径保存到当前目录里面
TcpClient::getinstance().setCurPath(strCurPath);
clearEnterDir();//将进入的子文件夹给清除掉,因为上一层的话,要显示上一层的信息,使用刷新的功能就可以了
flushDir();
}
}
void Book::flushDir()
{
QString strCurPath = TcpClient::getinstance().curPath();
PDU *pdu =mkPDU(strCurPath.size()+1);
pdu->uiMsgType=ENUM_MSG_TYPE_FLUSH_DIR_REQUEST;
strncpy((char*)(pdu->caMsg),strCurPath.toStdString().c_str(),strCurPath.size());
//发送给服务器
TcpClient::getinstance().getTcpSocket().write((char*)pdu,pdu->uiPDULen);
free(pdu);
pdu=NULL;
}
3、测试
点击jack文件夹,里面的文件有三个,之后点击返回按钮,直接返回到jack部分。再点击一次返回,因为已经是根目录了,所以直接警告
成功!!!!!!!!!