作为我正在处理的应用程序的一部分,我需要计算目录中的所有文件及其子目录。我写了一个递归函数,但奇怪的是它并没有计算大目录中的所有文件——不过它在较小的目录上工作得很好。
在一个有 16 个文件(其中 8 个在子目录中)的目录上,它运行良好,但是在对大约 500 个文件夹中的 8000 个文件进行测试时,它停止了 760 个文件的计数。
代码是:
void RecursiveSearch(wchar_t* param, int* pFiles)
{
HANDLE hFind;
WIN32_FIND_DATA wfd;
wchar_t* junk = new wchar_t [2];
StringCchPrintf(junk,2,L".");
wchar_t* path = new wchar_t [MAX_PATH];
StringCchPrintf(path,MAX_PATH,L"%s\\*",param);
hFind = FindFirstFile(path,&wfd);
do {
if (wfd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) {
wchar_t* tpath = new wchar_t [MAX_PATH];
StringCchPrintf(tpath,MAX_PATH,L"%s%s\\*",param,wfd.cFileName);
if (wfd.cFileName[0] == junk[0]) {
delete [] tpath; //filter for '.' directories
} else {
RecursiveSearch(tpath,pFiles);
delete [] tpath;
}
} else {
++*pFiles;
}
} while (FindNextFile(hFind,&wfd) == TRUE);
delete [] junk, param, path;
return;
}
'param' 传递文件路径(不带 \),'pFiles' 是指向包含文件计数的 int 的指针。
谁能告诉我我做错了什么?我在这里阅读了一些类似的帖子,但似乎都没有处理这个特定问题。