18,356
社区成员
发帖
与我相关
我的任务
分享
//客户端函数代码
int CClientDlg::UpdateList(const char* Path)
{
char strPath[MAX_PATH]={0};
char buff[15]={0};
SHFILEINFO shFinfo;
COMMAND cmd;
FILEINFO FileInfo;
int k;
ZeroMemory(&FileInfo,sizeof(FileInfo));
m_ListCtrl1.DeleteAllItems();
m_ListCtrl1.SetImageList(CImageList::FromHandle((HIMAGELIST)::SHGetFileInfo
((LPCTSTR)"C:\\",0,&shFinfo,sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX|SHGFI_LARGEICON)),LVSIL_NORMAL);
m_ListCtrl1.SetExtendedStyle(m_ListCtrl1.GetExtendedStyle()|
LVS_EX_FLATSB|LVS_EX_SUBITEMIMAGES|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
cmd.msg=WM_GETDIRLIST;
strcpy(cmd.param1,Path);
if(SOCKET_ERROR==send(m_SockListen,(char *)&cmd,sizeof(cmd),0))
{
closesocket(m_SockListen);
return 0;
}
++SendNum;
int Ret=0,Val=0;
int num=0;
Val=recv(m_SockListen,buff,sizeof(buff),0);
if (Val!=SOCKET_ERROR)
{
num=atoi(buff);
for(k=0;k<num;++k)
{
Val=recv(m_SockListen,(char*)&FileInfo,sizeof(FileInfo),0); if(Val!=SOCKET_ERROR)
{
strcpy(strPath,Path);
if (strPath[strlen(strPath)-1]!='\\')
{
strcat(strPath,"\\");
}
strcat(strPath,FileInfo.FileName);
Ret=CClientDlg::GetIconIndex(strPath,SHGFI_ICON|SHGFI_SMALLICON);
m_ListCtrl1.InsertItem(0,FileInfo.FileName,Ret);
}
else
{
closesocket(m_SockListen);
break;
}
++RecvNum;
}
}
m_ListCtrl1.SetRedraw(TRUE);
return num;//返回列表项数
}
//服务端
BOOL File::GetDirectoryList(const char *Path,SOCKET s)
{//显示目录或者文件的图标,文件名等FileInfo
FILEINFO FileInfo[MAXCOUNT];
WIN32_FIND_DATA wfd;
char szText[MAX_PATH];
char DirName[MAX_PATH];
int k=0,Pos=0;
//先判断指定路径是目录还是文件。
if (GetFileAttributes((LPCTSTR)Path)&FILE_ATTRIBUTE_DIRECTORY)
{
sprintf(szText,"%s\\*.*",Path);
}
else
{
strcpy(szText,Path);
}
for (k=0;k<MAXCOUNT;++k)
{
ZeroMemory(&FileInfo[k],sizeof(FileInfo[k]));
}
HANDLE hFind = FindFirstFile(szText, &wfd);
char msg[]="获取目录列表信息失败!";
if (hFind == INVALID_HANDLE_VALUE)
{
if(SOCKET_ERROR==send(s,msg,sizeof(msg),NULL))
{
closesocket(s);
}
++SendNum;
return FALSE;
}
BOOL isNext=TRUE;
SHFILEINFO strFileInfo={0};
while(isNext)
{
if (wfd.cFileName[0]!='.')
{
strcpy(DirName,Path);
k=strlen(DirName);
if (DirName[k-1]!='\\')
{
strcat(DirName,"\\");
}
strcat(DirName,wfd.cFileName);
GetFileInfo(DirName,FileInfo[Pos]);//获取当前指定目录下遍历的文件或者目录的信息。
++Pos;
++SendNum;
}
isNext=FindNextFile(hFind,&wfd);
Sleep(10);
}
sprintf(szText,"%d",Pos);
if(SOCKET_ERROR==send(s,szText,sizeof(szText),0))
{
closesocket(s);
return FALSE;
}
for (k=0;k<Pos;++k)
{
if(SOCKET_ERROR==send(s,(char *)&FileInfo[k],sizeof(FileInfo[k]),0))
{
closesocket(s);
return FALSE;
}
}
return TRUE;
}