Функция поискового пути Windows
-
21-08-2019 - |
Вопрос
Я использую следующее для поиска файла, определенного как макрос DB_CONFIG_FILE_PATH_1.
wchar_t filename[100];
SearchPath( L".\\", DB_CONFIG_FILE_PATH_1, NULL, 100, filename, NULL);
Если файл находится в каталоге C:\, он найден.Но, если файл находится в одном из его подкаталогов, функция его не находит.
Кто-нибудь может объяснить, как выполнить поиск файла с помощью вышеуказанной функции по всем дискам, включая подкаталоги.
Я не использую функцию FindFirstFile, потому что я не могу получить путь к файлу, даже если функция возвращает дескриптор файла.
Иными словами, мне нужен полный путь к файлу.Я знаю имя файла, но не знаю, где он находится на компьютере.
Решение
Для поиска подкаталогов в машинном коде Win32 вам нужно сделать это самостоятельно, используя FindFirstFile, а затем выполнить рекурсию в подкаталоги.
Возвращаемое значение FindFirstFile не является дескриптором файла - информация о файле содержится в возвращаемой структуре WIN32_FIND_DATA.Дескриптор используется в вызовах FindNextFile для продолжения поиска.Чтобы получить полное имя пути во время поиска, вам нужно будет отслеживать, в каком каталоге вы находитесь в данный момент, и добавлять найденные имена каталогов к пути.
SearchPath выполняет поиск только в переменной окружения PATH или первом параметре, если он присутствует, и не выполняет поиск в подкаталогах.
Другие советы
GetCurrentDirectory()
должен указать вам путь:
http://msdn.microsoft.com/en-us/library/aa364934 (ПРОТИВ 85).aspx
и второй аргумент из FindFirstFile()
:
http://msdn.microsoft.com/en-us/library/aa364418 (ПРОТИВ 85).aspx
который является WIN32_FIND_DATA
Структура должна сообщить вам имя файла:
http://msdn.microsoft.com/en-us/library/aa365740 (ПРОТИВ 85).aspx