0
作为正在处理的应用程序的一部分,我需要统计目录中的所有文件及其子目录。我已经写了一个递归函数,但奇怪的是,它不计算大目录中的所有文件 - 但它对较小的文件很好。统计目录及其子目录中的所有文件
在一个包含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。
谁能告诉我我做错了什么?我在这里看过几个类似的帖子,但没有一个似乎处理这个问题。
你试过调试呢?它是否停留在特定的嵌套级别? –
MAX_PATH足够大吗?也许还要检查StringCchPrintf()的返回码。 –
这段代码看起来与那些新的和删除[]混乱。如果不排除boost(实际上应该没有理由),请查看http://www.boost.org/doc/libs/1_52_0/libs/filesystem/doc/tutorial.html –