程序段
可以实现你要求的功能
CFileFind
ff
CString
strDir=
"d:\\Program
Files\\*.*"
BOOL
res
=
ff.FindFile(strDir)
while(res)
{
res
=
ff.
FindNextFile
if(ff.IsDirectory()
&&
(!ff.IsDots()))()//庆高遍历子目录,剔除".0”和".."两唯燃个
{
CString
strFile
=
ff.
GetFileName
()
…
//
在这里写需要的代码
}
}
ff.Close()
//
不要指差虚忘记关闭
若满意请及时采纳,谢谢
RefreshDataTemp(strPath)} /差拍/递归调用这里你也写了,是递归调碰乎用,那么也就是子目录的统计,是在另一个(同名)函数调用中完成的,而size和Size都是局部笑庆悉变量,不会传递到上一层函数调用。
解决方法:Size 作为返值或全局变量,tr的三行语句放在这个函数之外,不参与递归。
把以下代码放到Win32控喊山制台运行,亲测可用:#include <windows.h>
#define FILEILTER "*.*" //查找条件,例如查找羡枯.exe格式的那么就用*.exe,当然也可以直接用setup.exe
#include "iostream.h"
#include "stdio.h"
BOOL IsRoot(LPCTSTR lpszPath)
{
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) //兄渗洞 如果没有找到或查找失败
return
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("E:") //这里设置目录为E:,请根据需要更改
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)