Консультация № 167600
18.05.2009, 03:02
0.00 руб.
0 4 0
как найти файл в каталогах и подкаталогах ????????
И передать в PutFile("F:\\gag.txt",CString("gag.txt"));
С использованием

WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile("F:\\gag.txt", &FindFileData);
FindNextFile(hFind, &FindFileData);

Обсуждение

Неизвестный
18.05.2009, 18:01
общий
Вот код который ищет файлы
как сделать чтобы он искал файлы в подкатологах????

WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile("F:\\*.txt*", &FindFileData);
AfxMessageBox(FindFileData.cFileName);
if (hFind == INVALID_HANDLE_VALUE)
{
AfxMessageBox("file don`t finded");
FindClose(hFind);
}
else
do
{

FindNextFile(hFind, &FindFileData);

AfxMessageBox(FindFileData.cFileName);
}
while(true);
FindClose(hFind);
Неизвестный
19.05.2009, 19:40
общий
FindFirstFileEx может искать каталоги. Для каждого найденного каталога опять запускаете эту функцию.
Неизвестный
26.05.2009, 19:00
общий
Evgenijm:
Почему максимальная глубина рекурсии 3. и как нам определить поиск по всем каталогам????


bool SearchFileRecursive(const wstring& file, const wstring& directory, wstring& found, int maxdepth, int depth = 0)
{
WIN32_FIND_DATAW fData;
wstring mask = directory + L"\\\\*.*";

HANDLE search = FindFirstFileW(mask.c_str(), &fData);

if (search == INVALID_HANDLE_VALUE) return false;
else
{
do
{
if (!wcscmp(fData.cFileName, L".") || !wcscmp(fData.cFileName, L"..")) continue;
found = directory + L"\\\" + fData.cFileName;

if (file == fData.cFileName)
{
return true;
}
else
if (fData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (depth < maxdepth &&
SearchFileRecursive(file, found, found, maxdepth, depth + 1))
{
return true;
}
}

} while (FindNextFileW(search, &fData));
}

FindClose(search);
return false;
}

void main()
{
const int MAX_RECURSION_DEPTH = 3;
wstring found;
SearchFileRecursive(L"3b.doc", L"d:", found, MAX_RECURSION_DEPTH);*/
}

Неизвестный
27.05.2009, 05:57
общий
Глубина рекурсии там явно задана в MAX_RECURSION_DEPTH. Чтобы он не обрывался либо давайте заведомо слишком большую глубину, либо уберите все, что использует depth.
Наверное, достаточно даже просто удалить вот это: depth < maxdepth &&
Остальное будет мусором, но не должно мешать выполнению.
Форма ответа