Консультация № 167584
17.05.2009, 23:46
0.00 руб.
0 4 1
не могу запустить функцию SearchPath
SearchPath(NULL,"disclaimer",".txt", 255,lpBuffer,NULL);
из всего прочитаного я понял что нужно передать четыре параметра
адрес директории
имя файла
тип файла
размер буфера

последние два должны содержать полный путь файла и размер буфера для адреса файла.
после компиляции выдает ошибку что последние два параметра используються без инициализации.
Помогите запустить функцию.

Обсуждение

Неизвестный
18.05.2009, 00:43
общий
это ответ
Здравствуйте, Ланчковский Алексей Викторович!

Последние два параметра не должны инициализироваться, здесь все верно.
Вот рабочий пример:
Код:
#include <windows.h>

void main()
{

char file[MAX_PATH];
SearchPathA("D:/","3b",".doc", MAX_PATH, file, NULL);
}

5
Неизвестный
18.05.2009, 02:06
общий
Да спасибо этот пример работает!!!

Неизвестный
18.05.2009, 02:18
общий
А как выполнить поиск по всем каталогам
с помощью функции SearchPath ????
Неизвестный
18.05.2009, 20:09
общий
Никак. Используйте FindFirstFile/FindNextFile и рекурсию:
Код:

#include <windows.h>
#include <string>
#include <cstdio>
using namespace std;

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);
}
Форма ответа