Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Проблема с определением текущей директории  [new]
w3d
Member

Откуда: Сургут
Сообщений: 681
Использую следующий код:
PUBLIC m.gccurdir
m.gccurdir=SYS(5)+SYS(2003)+'\'
SET DEFAULT TO '"'+m.gccurdir+'"'
SET PATH TO Bin, Form, Data, Menu, Report, Otchet

Если программу (*.exe) запускать непосредственно с места, где она лежит - все определяется верно.
Если же сделать ярлык на программу - при запуске определяется место, где лежит ярлык.
Как это побороть?
9 окт 06, 06:46    [3235143]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с определением текущей директории  [new]
w3d
Member

Откуда: Сургут
Сообщений: 681
Отвечаю сам себе :)
Надо указать в свойствах ярлыка рабочую папку - ту же , что и где лежит программа.
9 окт 06, 06:48    [3235145]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с определением текущей директории  [new]
Dima T
Member

Откуда:
Сообщений: 15271
Если хочешь наверняка оказаться в той же папке, где и твой еxе
DECLARE INTEGER GetModuleFileName in win32api Integer, String @, Integer
lcFileName = space(400)
GetModuleFileName(0, @lcFileName, 400)
lcFileName = alltrim(lcFileName)
lcFileName = left(lcFileName, len(lcFileName) - 1)
set defa to (Justpath(lcFileName))
9 окт 06, 07:17    [3235164]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с определением текущей директории  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
JUSTPATH((sys(16))
9 окт 06, 10:32    [3235560]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с определением текущей директории  [new]
Dima T
Member

Откуда:
Сообщений: 15271
-=AlexiS=-
JUSTPATH((sys(16))


Надо хоть как-то самому проверять что советуешь. А то я уж было подумал что велосипед изобрел
17 окт 06, 16:19    [3271895]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с определением текущей директории  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Dima T
-=AlexiS=-
JUSTPATH((sys(16))


Надо хоть как-то самому проверять что советуешь. А то я уж было подумал что велосипед изобрел

А чем вам не угадил ответ -=AlexiS=- !?
Ну лишнюю скобку человек поставил! А так, вполне нормальное решение.
С уважением, Алексей.
17 окт 06, 19:34    [3273405]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с определением текущей директории  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
а что будет, если программу удаленно запускают? т.е. сама прога на одном компе с рашарками, а пущают ее, находящуюся в сети, с другого компа, возможно даже ярлычком???
sys(5) отдает сетевой путь, sys(16) даст то же самое, тока с именем файла, а нужно знать откедова прогу запустили, т.е. грубо говоря, на каком компе она исполняется.
20 окт 06, 16:34    [3289519]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с определением текущей директории  [new]
Dima T
Member

Откуда:
Сообщений: 15271
Aleksey-K
Dima T
-=AlexiS=-
JUSTPATH((sys(16))


Надо хоть как-то самому проверять что советуешь. А то я уж было подумал что велосипед изобрел

А чем вам не угадил ответ -=AlexiS=- !?
Ну лишнюю скобку человек поставил! А так, вполне нормальное решение.
С уважением, Алексей.


2 Aleksey-K, -=AlexiS=-
мне как раз на днях потребовалось это самое (проверка наличия файлика именно в той папке где и exe), 2 часа потерял, пока в отладчик не заглянул.
Пример: проект из одного start.prg
GetExe()
return

proc GetExe
messagebox(sys(16))

Поробуй запустить. Еще интересней результат, если функцию GetExe() вынести в PRG с процедурами, как оно мне и надо было.

Но надо признать работает вариант если start.prg сделать так
messagebox(sys(16))
22 окт 06, 11:31    [3292643]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с определением текущей директории  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
2 Dima_T
Вы перед тем, как использовать функцию SYS(16) в HELP заглядывали? Ну, хорошо, не "перед", а "после" того, как у Вас получился "странный результат"?

У функции SYS(16) есть еще и второй параметр. Так вот, если он опущен, то Вы получите путь доступа к текущей процедуре. Той, в которой собственно и была дана команда SYS(16). Если она была дана в APP, то и получите путь доступа к файлу APP.

Если нужен путь доступа к стартовому файлу, то используют второй параметр

?SYS(16,0)

или

?SYS(16,1)

Вот здесь про это написано.

Как определить директорию, из которой запущена программа

И еще. Не существует абсолютного, сто-процентно верного, способа определить путь доступа к стартовой директории. Любые способы определения зависят от конкретных условий задачи.
22 окт 06, 12:45    [3292710]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить