재귀 함수가 있습니다. 첫 번째 인수에서 주어진 드라이브 나 폴더 내에서 두 번째 인수에 주어진 이름의 폴더를 재귀 적으로 검색합니다. 두 번째 인수에 주어진 폴더는 첫 번째 인수에 주어진 드라이브 또는 폴더 내의 모든 경로와 중첩 수준에서 찾을 수 있습니다. 그래서 함수는 첫 번째 인수에 지정된 드라이브 또는 폴더의 모든 내용을 찾아서 두 번째 인수에 지정된 폴더를 찾습니다. 다음은 함수 자체는 다음과 같습니다재귀 함수가 올바른 값을 반환하지 않습니다.
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