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 –