18,356
社区成员
发帖
与我相关
我的任务
分享
/*
* 接收目录包括根目录和显示出来
*/
BOOL CMyDirDlg::RecvDirString(int nDataLen,SOCKET s)
{
CMyDirDlg* pMyDirDlg;
m_TreeCtrl.InsertItem(_T("IP"));
BOOL reVal = TRUE; //返回值
int nReadLen = 0; //接收数据长度
int nTotalLen = 0; //已读数据长度
list<string> listDir; //二级目录链表
listDir.clear(); //清空
string strDir; //二级目录
while ( nTotalLen != nDataLen )
{
char cRecv; //接收字符
SOCKET sClient =s;
nReadLen = recv(sClient, &cRecv, 1,0); //每次接收一个字符
if (SOCKET_ERROR == nReadLen)
{
AfxMessageBox(_T("读取目录失败!"));
reVal = FALSE;
}else if (0 == nReadLen)
{
AfxMessageBox(_T("服务器关闭了连接!"));
reVal = FALSE;
}else if (nReadLen > 0)
{
if ('<' == cRecv) //二级目录的开始分隔符,
{
strDir.erase(strDir.begin(), strDir.end()); //清除数据
}else if ('>' == cRecv) //二级目录的结束分隔符
{
listDir.push_back(strDir); //加入二级目录链表中
}else
{
strDir += cRecv; //添加字符
}
nTotalLen += nReadLen;
}
}
//上面部分运行发现都正确,没有什么问题,表明已正确收到信息。
list<string> &listSubDir=listDir;
list<string>::iterator itSubDir = listSubDir.begin();
for (itSubDir; itSubDir != listSubDir.end(); ++itSubDir)
{
//从二级目录链表中取出一个目录(包含了若干三级目录)
string strSubDir = *itSubDir;
string strFind = "\\"; //二级目录与三级目录的分隔符
int rootPos = strSubDir.find(strFind); //找到分隔符位置
if (rootPos != string::npos)
{
//二级目录名称
string strSubDirName = strSubDir.substr(0, rootPos);
AfxMessageBox(strSubDirName.c_str());正确能收到磁盘符号。
//调试发现出在 HTREEITEM hti =pMyDirDlg->m_Tree.Ctrl.InsertItem(_T("IP"));
//加入树视的二级节点
// HTREEITEM m_hTreeCur; //m_TreeCtrl //树的当前子项句柄
// HTREEITEM hChild =pMyDirDlg->m_TreeCtrl.InsertItem(_T(strSubDirName.c_str()), m_hTreeCur,TVI_LAST);
AfxMessageBox(strSubDirName.c_str());
//移动二级目录之后的位置,就是三级目录开始的位置
string::iterator itstr = strSubDir.begin();
int nOffet = 0;
while (nOffet < rootPos +1)
{
itstr++;
nOffet++;
}
//将三级目录加入树视二级节点中
string item;//临时变量,保存三级目录
for (; itstr != strSubDir.end();++itstr)
{
if (SEPERATOR == *itstr)//三级目录分隔符'|'
{
//加入三级目录
// dlg.m_Tree.InsertItem(item.c_str(), hChild, TVI_LAST);
item.erase(item.begin(),item.end());
}else
{
item += *itstr;
}
}
}
//nChild++;//增加二级目录的数量
}
//HTREEITEM m_hTreeCur; //树的当前子项句柄
// dlg->m_tree.Expand(m_hTreeCur,TVE_EXPAND);
listDir.clear(); //清空链表
return true;
}