我的疑问 我用注释的形式吧,代码是正确的,我COPY来的,只是有几点不太明白,希望能得到指点,刚接触MFC。BOOL IsRoot(LPCTSTR lpszPath) // LPCSTR 是常量字符类型么?不太明白这个BOOL函数的作用。
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\", lpszPath[0]); //
return (lstrcmp(szRoot, lpszPath) == 0); // 这两句都不太明白。
} void FindInAll(LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
if(!IsRoot(szFind))
lstrcat(szFind, "\\");
lstrcat(szFind, FILEILTER); // 找所有文件 ( 怎么实现的?)
WIN32_FIND_DATA wfd; // 这是什么类型
HANDLE hFind = FindFirstFile(szFind, &wfd);
if(hFind == INVALID_HANDLE_VALUE) // INVALID_HANDLE_VALUE ???
return;
// do while 循环大体能理解 不过不透彻。
do
{
if(wfd.cFileName[0] == '.')
continue; // 过滤这两个目录
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if(IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
{
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归
}
}
else
{
TCHAR szFile[MAX_PATH];
if(IsRoot(lpszPath))
{
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
}
else
{
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
printf("%s\n", szFile);
}
// 对文件进行操作
}
}
while(FindNextFile(hFind, &wfd));
FindClose(hFind); // 关闭查找句柄 }
int main(int argc, char* argv[])
{
FindInAll("D:\\date");
return 0;
}
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\", lpszPath[0]); //
return (lstrcmp(szRoot, lpszPath) == 0); // 这两句都不太明白。
} void FindInAll(LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
if(!IsRoot(szFind))
lstrcat(szFind, "\\");
lstrcat(szFind, FILEILTER); // 找所有文件 ( 怎么实现的?)
WIN32_FIND_DATA wfd; // 这是什么类型
HANDLE hFind = FindFirstFile(szFind, &wfd);
if(hFind == INVALID_HANDLE_VALUE) // INVALID_HANDLE_VALUE ???
return;
// do while 循环大体能理解 不过不透彻。
do
{
if(wfd.cFileName[0] == '.')
continue; // 过滤这两个目录
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if(IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
{
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归
}
}
else
{
TCHAR szFile[MAX_PATH];
if(IsRoot(lpszPath))
{
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
}
else
{
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
printf("%s\n", szFile);
}
// 对文件进行操作
}
}
while(FindNextFile(hFind, &wfd));
FindClose(hFind); // 关闭查找句柄 }
int main(int argc, char* argv[])
{
FindInAll("D:\\date");
return 0;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货