我有一個遞歸函數。它執行文件夾的遞歸搜索,在驅動器或文件夾中的第二個參數中給出名稱,該名稱在第一個參數中給出。在第二個參數中給出的文件夾可以定位在第一個參數中給出的驅動器或文件夾內的任何路徑和任何嵌套級別。 因此,功能瀏覽第一個參數中指定的驅動器或文件夾的所有內容,以查找第二個參數中指定的文件夾。下面是函數本身:遞歸函數不返回正確的值
wstring FolderPathValidator::FindRequiredFolder(const wstring& p_InitialPath, wstring p_RequiredFolderName)
{
wstring foundFolder = L"";
wstring folderPath = p_InitialPath + L"\\*";
WIN32_FIND_DATAW folderInfo;
HANDLE search_handle = FindFirstFileW(folderPath.c_str(), &folderInfo);
if (search_handle != INVALID_HANDLE_VALUE)
{
vector<wstring> folders;
do
{
if (folderInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if ((!lstrcmpW(folderInfo.cFileName, L".")) || (!lstrcmpW(folderInfo.cFileName, L"..")))
continue;
}
folderPath = p_InitialPath + L"\\" + wstring(folderInfo.cFileName);
if (folderInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (folderInfo.cFileName == p_RequiredFolderName)
{
foundFolder = folderInfo.cFileName;
return foundFolder;
}
folders.push_back(folderPath);
}
} while (FindNextFileW(search_handle, &folderInfo));
::FindClose(search_handle);
for (vector<wstring>::iterator iter = folders.begin(), end = folders.end(); iter != end; ++iter)
FindRequiredFolder(*iter, p_RequiredFolderName);
}
return foundFolder;
}
而在代碼中,我把它叫做以下列方式:
wstring FoundFolder = FindRequiredFolder(L"C:", L"TextFiles_to_Test");
但是,如果我直接把我的功能,明知正確的方式(其中第二個參數給出的文件夾是否存在)它返回一個空字符串。我應該如何更正代碼,以便函數返回找到的文件夾。
我補充一點,我一步一步地檢查調試器,在那裏我看到該函數找到需要的文件夾,但在其調用操作符中返回一個空字符串。
不幸的是,它並沒有幫助。 – user3769902