ноги темы выросли тут
Ссылка
со встроенной функцией понятно, интересует апи
GetCurrentDirectory_() про неё в разных источниках, перевод разных авторов, написано что возвращает именно папку экзешника
но тут смущает наличие
SetCurrentDirectory_(), непонятно зачем это нужно
GetFullPathName_() эта формирует полный путь из текущего пути и заданного имени файла, интересная функция
функция идеально подходит для работы с папками, файлами программы
а что скажет товарищь Smitis
вот две версии кода, они всегда одно выдают
где правда? как правильно получить эту папку?
Procedure myGetCurrentDirectory()
Protected pPath.s, n1, n2, *m1, *m2, n3, s.s
n1 = GetCurrentDirectory_(0, 0); возвращает необходимую длину строки с учётом стоп байта
*m1=AllocateMemory(n1*2); удваиваем под юникод
n2 = GetCurrentDirectory_(n1, *m1); читаем путь
s = PeekS(*m1); получаем путь без последней косой
;Debug ""+n1+" "+n2+" "+pPath
; извращение, но эффект тот же
; имя обязательно, достаточно одного символа от тёти Фени
n1=GetFullPathName_("Nj", 0, 0, 0)
*m2=AllocateMemory(n1*2); удваиваем под юникод
n2=GetFullPathName_("N", n1, *m2, @n3)
;PokeU(n3, 0); необязательно забивать стоп байт, можно указать сколько символов читать
; -1 это длина имени файла
pPath = PeekS(*m2, n2-1); получаем путь откуда запущен экзешник
;Debug ""+n1+" "+n2+" "+Hex(n3)+" "+pPath
MessageRequester("",""+n1+" "+n2+" "+Hex(n3)+" "+pPath+#CRLF$+s)
;ShowMemoryViewer(*m2, 111)
EndProcedure

