Я пытаюсь создать программу, которая должна:
- Поиск указанного c файла путем перехода в каталог и его подкаталоги (рекурсивно)
Но я вроде запутался, у меня переполнение стека. Вот функция, которая доставляет мне неприятности:
BOOL LoopThroughDirectories(LPTSTR fileName)
{
//Searching for files that matches in the current directory
WIN32_FIND_DATA ffd;
HANDLE hFirstFile = FindFirstFile(fileName, &ffd);
if (hFirstFile != INVALID_HANDLE_VALUE)
{
do
{
//If it's not a directory
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_NORMAL)
{
_tprintf("%s\n", ffd.cFileName);
}
} while (FindNextFile(hFirstFile, &ffd));
}
FindClose(hFirstFile);
//Go into the first unexplored directory
HANDLE hFirstDir = FindFirstFile(_T("*"), &ffd);
if (hFirstDir != INVALID_HANDLE_VALUE)
{
do
{
//If it's a directory
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//Go into it
SetCurrentDirectory(ffd.cFileName);
//and do the same
LoopThroughDirectories(fileName);
SetCurrentDirectory(_T(".."));
}
} while (FindNextFile(hFirstDir, &ffd));
}
FindClose(hFirstDir);
return TRUE;
}
Вот моя основная функция:
int _tmain(int argc, LPCTSTR argv[])
{
//Parsing the command line arguments
//Processing the fileName
LPTSTR tempPath;
LPTSTR fileName;
//Checking for emptyness
if (argc == 2)
{
tempPath = argv[1];
}
else
{
//If empty set filename to *
tempPath = _T("*");
}
//Removing trailing backslash if any
LPTSTR backSlash = _tcsrchr(tempPath, _T("\\"));
if (backSlash != NULL)
{
//Replacing backslash with terminating null character
*backSlash = _T("\0");
}
fileName = tempPath;
//Looping through directories
LoopThroughDirectories(fileName);
return EXIT_SUCCESS;
}
Вот исключение, которое мне дал VS Debugger (я говорю по-французски извините):
Исключение не указано: 0x77382358 (ntdll.dll) dans lsW.exe: 0xC00000FD: переполнение стека (параметры: 0x00000001, 0x00802FE C).