Описание функции
_WinAPI_PathFindOnPath
Возвращает полный путь файла найденного в окружении %PATH%
_WinAPI_PathFindOnPath(file$, *other_dir)
Параметры
file$ | Файл без пути. |
*other_dir |
Дополнительная папка, например текущая директория программы |
Возвращаемое значение
Успех: | Возвращает полный путь |
Ошибка: | Возвращает переданное имя файла, если не найдено |
Пример
; функция на основе примера Пётра
; http://purebasic.mybb.ru/viewtopic.php?id=951#p9355
Procedure.s PathFind3(*pfile)
Protected Dim Dirs.s(1)
Protected Path.s{#MAX_PATH} = PeekS(*pfile)
Dirs(0) = GetPathPart(ProgramFilename())
PathFindOnPath_(@Path, @Dirs())
ProcedureReturn Path
EndProcedure
Structure other_dirs
*path
EndStructure
; это на x64 работает
Procedure.s PathFind(file$)
Protected tmp$, tmp2$
tmp2$ = WorkDir$
Protected other_dirs.other_dirs
other_dirs\path = @tmp2$
tmp$ = Space(#MAX_PATH)
PokeS(@tmp$, file$)
If PathFindOnPath_(@tmp$, @other_dirs)
file$ = tmp$
EndIf
ProcedureReturn file$
EndProcedure
; это на x64 падает, так как *other_dir должен быть массив путей
Procedure.s _WinAPI_PathFindOnPath(file$, *other_dir)
Protected tmp$
tmp$ = Space(#MAX_PATH)
PokeS(@tmp$, file$)
If PathFindOnPath_(@tmp$, @*other_dir)
file$ = tmp$
EndIf
ProcedureReturn file$
EndProcedure
; Работает идеально, не учитывает текущий каталог с программой
Procedure.s PathFind2(file$)
Protected tmp$
tmp$ = Space(#MAX_PATH)
PokeS(@tmp$, file$)
If PathFindOnPath_(@tmp$, #Null)
file$ = tmp$
EndIf
ProcedureReturn file$
EndProcedure
Define CurPath$ = GetPathPart(ProgramFilename())
Debug _WinAPI_PathFindOnPath("shell32.dll", @CurPath$)
Debug _WinAPI_PathFindOnPath("shell32.dll", #Null)