Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2011, 20:10   #11
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка

Цитата:
Сообщение от sheva_ya Посмотреть сообщение
Проблема в следующем:
При запуске программы, в обработчике Form.Create, мне нужно узнать полный адрес каталога из которого запущен .exe файл, т.е. в таком виде D:\Programs\...\MyProgram\Project1. exe
Всё таки я был прав. Объявляется глобальная переменная:
Код:
var sProgramPath: string;
Потом:
Код:
sProgramPath := GetCurrentDir;
Цитата:
Сообщение от veniside Посмотреть сообщение
Видимо, у вас в проектах нет Open/Save диалогов, например. Они меняют текущую дерикторию. Да и файл может быть запущен с предустановленным рабочим (текущим) каталогом. Это легко проверить, создав shortcut на ваш файл и задав в свойствах shortcut-а какой угодно стартовый каталог, отличный от каталога с .ехе.
Это определение только один раз, я внимательно прочитал сообщение ТС.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 18.02.2011, 09:11   #12
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> я внимательно прочитал сообщение ТС.

а то, что написал я, очевидно, прочитали невнимательно )

Цитата:
файл может быть запущен с предустановленным рабочим (текущим) каталогом. Это легко проверить, создав shortcut на ваш файл и задав в свойствах shortcut-а какой угодно стартовый каталог, отличный от каталога с .ехе.
GetCurrentDir() вернёт вот этот любой заданный стартовый каталог, а не "полный адрес каталога из которого запущен .exe файл".
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.02.2011, 09:29   #13
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка

Цитата:
Сообщение от veniside Посмотреть сообщение
GetCurrentDir() вернёт вот этот любой заданный стартовый каталог, а не "полный адрес каталога из которого запущен .exe файл".
Не пойму суть Ваших переживаний. Мой способ самый чёткий - пусть меня поправят 10(минимум) человек. Вы же говорите про исключительный частный случай.

Ради интереса - назовите мне условие его возникновения.

Судя по Вашему упорству - я не прав??? Так и скажите мой способ НЕ работает, иначе можно ещё, вывернуться и придумать 100 частных случаев.

ЗЫ: у некоторых крупных программ - в ярлыке вообще не задан рабочий каталог.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 18.02.2011, 10:57   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Ради интереса - назовите мне условие его возникновения.
не сорьтесь, горячие парни...

проблема в том, что у автора вопроса противоречие заложено прямо в условиях задачи:
Цитата:
мне нужно узнать полный адрес каталога из которого запущен .exe файл, т.е. в таком виде D:\Programs\...\MyProgram\Project1. exe
т.о. подменяются понятия каталог, где расположен EXE файл и каталог, из которого этот EXE файл запустили.

я думаю, что его интересует ВТОРОЕ (т.е. полный путь к запущенному EXE-шнику).
В этом случае правы мы с veniside.

Если же его интересует, откуда мы запустили программу, ВНЕ ЗАВИСИМОСТИ от того, где лежит EXE-шник - тогда Вы, xwicked, правы! Нужно брать текущий каталог.

А то, что это ДАЛЕКО не одно и тоже доказать элементарно.

xwicked, напишите программку, которая при запуске выдаёт каталог, который, как Вы утверждаете, является каталогом расположения EXE файла.
Положите эту программку, например, в корень диска D:\
т.е. полный путь будет D:\Project1.exe

в командной строке перейдите на любой другой диск,каталог, наберите
D:\Project1.exe enter - и наблюдайте результат...

Последний раз редактировалось Serge_Bliznykov; 18.02.2011 в 11:05.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.02.2011, 12:22   #15
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А то, что это ДАЛЕКО не одно и тоже доказать элементарно.
Serge_Bliznykov, Вы ещё раз доказали, что я прав.
Цитата:
Сообщение от xwicked Посмотреть сообщение
Ещё вариант, каким я пользуюсь(только каталог):
Код:
var
  dir : string;

begin
  // Получаем текущую директорию
  dir := GetCurrentDir;
end;
Я не говорил, что ParamStr(0) - это не правильно - я жирным выделил свои слова.

ParamStr(0) - универсальный вариант, может использоваться для всех случаев, включая написание административных утилит, где теоретически предполагается работа из консоли.
GetCurrentDir - может использоваться для всех остальных программ(не административных), как самый простой вариант.

Вопросы есть? Привели только 2-а очень частных случая. Хотя с ярлыком - это был немного глупый пример.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 18.02.2011, 13:32   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вопросы есть?
у меня вопрос и раньше не было (ну, разве что к TC - чтобы понять, что ему точно нужно и зачем).

Цитата:
GetCurrentDir - может использоваться для всех остальных программ
вы не правы. Текущий каталог - это совсем другое.
И, если Вы это понимаете, то тогда зачем спорите.
Узнать путь, где лежит exe-шник часто бывает нужно. Например, если рядом с EXE-шником нужно взять INI файл (или БД, или какие-то ресурсы/данные/картинки, лежащие в каталоге рядом с EXE-шником)...
И то, что я могу просто запустить Ваш проект так, что проект неправильно определит каталог запуска — это "косяк" программиста... И чем строчка GetCurrentDir проще, чем ExtractFilePath(Paramstr(0)), я лично не понимаю... И, видимо, уже не пойму...

Впрочем, думаю, позиции сторон ясны, точки на I поставлены, дальнейший спор — бесполезен, ибо никого никому ничего не докажет...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.02.2011, 14:10   #17
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
И то, что я могу просто запустить Ваш проект так, что проект неправильно определит каталог запуска — это "косяк" программиста...
Кроме команды в консоли, как ещё? Без ярлыка, другой пример, с которым может встретиться рядовой пользователь?

В этом и заключается мастерство программиста, чтобы решать одну задачу 8-ю способами. Вы, если профессионал, то должны это понимать...
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
И чем строчка GetCurrentDir проще, чем ExtractFilePath(Paramstr(0)), я лично не понимаю... И, видимо, уже не пойму...
Хотя бы количеством символов - проще для запоминания.
Если Вы спорите , то я рассуждаю.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вы не правы. Текущий каталог - это совсем другое.
Если я и не прав, то только тем, что не робот, могу делать вариации в применении полученных мной знаний.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как привязать текстовый файл имя которого меняется. SergeyK Microsoft Office Excel 8 28.10.2010 14:16
Найти окно программы ксли запущен exe Человек_Борща Общие вопросы Delphi 2 28.08.2010 12:39
Как удалить exe если он запущен? jone Общие вопросы Delphi 31 07.06.2010 13:33
Как 'засунуть' звуковой файл в EXE-шник.чтоб моя прога состояла всего из одного exe betirsolt Общие вопросы Delphi 11 18.04.2010 21:58
из Паскаля определить запущен ли Windows Трофимов Александр Паскаль, Turbo Pascal, PascalABC.NET 9 14.06.2007 15:25