私が取り組んでいるアプリケーションの一部として、ディレクトリとそのサブディレクトリ内のすべてのファイルをカウントする必要があります。私は再帰関数を作成しましたが、奇妙なことに、大きなディレクトリ内のすべてのファイルをカウントするわけではありません。ただし、小さなディレクトリでは正常に機能します。
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へのポインターです。
誰かが私が間違っていることを教えてもらえますか?私はここでいくつかの同様の投稿を読みましたが、それらのどれもこの特定の問題を扱っていないようです。