Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как узнать директорию...


Автор: Bangladesh 5.5.2005, 12:39
Вся фишка в том, что я шарю как добыть непосредственно имя файла, который запущен, с полным путём к нему, но мне нужен просто путь, без имени файла в конце для того, чтобы по умолчанию предлогать его для сохранения. как это сделать?

Автор: Alex 5.5.2005, 12:43
ExtractFilePath(ParamStr(0))

Автор: Poseidon 5.5.2005, 16:39
ExtractFilePath(const FileName: string) предложенный Alex, возвращает путь к каталогу (включая указание диска и слэш перед именем файла), вырезанный из строки с полным именем файла FileName.

ExtractFileDir(const FileName: string) возвращает путь к каталогу (включая указание диска), вырезанный из строки с полным именем файла FileName. (без последнего слеша)

FileName можно передавать как Alex, т.е. ParamStr(0). А можно и так: Application.ExeName

Автор: Yanis 5.5.2005, 17:03
Цитата(Poseidon @ 5.5.2005, 16:39)
А можно и так: Application.ExeName

Зачем дублировать функцию?

Автор: Poseidon 5.5.2005, 17:57
Yanis, и где дубль? Что продублировано? ExtractFilePath и ExtractFileDir или ParamStr(0) и Application.ExeName? Что? Это пары совершенно разных функций! Да, ParamStr(0) и Application.ExeName возвращают одно и то же, но это разные функции! Application.ExeName, например, ты не сможешь использовать в DLL, а ParamStr(0) можно! Так что не нужно этого, нет тут дублирования. smile

Автор: Yanis 5.5.2005, 18:31
Цитата(Poseidon @ 5.5.2005, 17:57)
Да, ParamStr(0) и Application.ExeName возвращают одно и то же, но это разные функции! Application.ExeName, например, ты не сможешь использовать в DLL, а ParamStr(0) можно! Так что не нужно этого, нет тут дублирования.

Они возвращают одно значение потому, что Application.ExeName совойство TApplication, значением которого является работа метода GetExeName. А GetExeName реализован вот так:
Код

function TApplication.GetExeName: string;
begin
  Result := ParamStr(0);
end;


Так, что ParamStr(0) тождественно равносилен Application.ExeName. К тому же при Delphi преобразует вызов функции ParamStr(0) как непосредственный вызов в асме, т.е. call. А при использовании Application.ExeName вызов этих самых call происходит 2 раза, - но это мелочи =)

Автор: Poseidon 5.5.2005, 18:59
"Тождественно равносилен" не означает дубль! Хоть функции приходят к одному и тому же, но это РАЗНЫЕ ФУНКЦИИ! И в некоторых ситуациях (с той же DLL к примеру) замена одной функции другой не будет равносильной.
В общем, не будем засорять тему, если хочешь поспорить, пиши в РМ smile

Автор: Bangladesh 6.5.2005, 12:19
всем спасибо, вы мне помогли =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)