最近在做一个程序,其中用到了Windows Shell编程技术,现在总结一下。。。
关键知识:
SetCurrentDirectory() Windows API函数
CFileFind 类,CFileFind::FindFile() , CFileFind::FindNextFile()等函数
注意:最后使用完CFileFind 要关闭CFileFind::Close()
void CClientFtpDlg::FindLocalFile(void)
{
FTP_FILE_INFO *pInfo = new FTP_FILE_INFO; //FTP_FILE_INFO是自定义的类型,将作为消息参数发送
CFileFind FileFind;
UINT i = 0;
CTime time;
BOOL bContinue;
//设置当前目录
::SetCurrentDirectory(m_LocalDirectory); //m_LocalDirectory为要搜索的目录地址
//显示所有该目录下文件
bContinue=FileFind.FindFile("*.*");
CString str;
while (bContinue)
{
bContinue=FileFind.FindNextFile();
if (FileFind.IsHidden()) continue; //不显示隐藏文件
str=FileFind.GetFileName();
strcpy(pInfo->sFileName,str);
FileFind.GetLastWriteTime(time);
str=time.Format("%x");
strcpy(pInfo->sFileDate,str);
if (FileFind.IsDirectory())
{
strcpy(pInfo->sFileSize,"");
pInfo->n_Type=DIRECTORYICON;
::SendMessage(this->m_hWnd,WM_SETDIR,(WPARAM)pInfo,(LPARAM)LOCFILE); //发送消息到处理函数
}
else
{
DWORD i=FileFind.GetLength(); //获得当前文件大小
if (i>1024)
{
str.Format("%d",i/1024);
str+=" KB";
}
else
{
str.Format("%d",i);
str+=" Bytes";
}
strcpy(pInfo->sFileSize,str);
pInfo->n_Type=FILEICON;
::SendMessage(this->m_hWnd,WM_SETFILE,(WPARAM)pInfo,(LPARAM)LOCFILE); //发送消息到处理函数
}
}
delete pInfo;
FileFind.Close();
}