Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать имя запускаемого файла 
V
    Опции темы
Нитонисе
Дата 18.11.2011, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Есть программа Program.exe. Есть файл File.my. Установлена ассоциативная связь между программой Program.exe и файлами типа *.my. При запуске файла File.my открывается программа Program.exe и заполняется данными из файла. Я хочу в Caption главной формы поместить имя запускаемого файла. В переменной ParamStr(1) имя какого-то другого файла, по всей видимости копии. Где взять имя нужного мне файла с путем  нему?

Дополнительный вопрос. Как отображать имя файла, если путь к нему длинный? Что-то наподобие С:\MyFiles\...\Project\File.my. То есть смысл что средняя часть прячется троеточием, при этом общая строка укорачивается.
PM MAIL   Вверх
MAXIQ
Дата 19.11.2011, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName);
extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);
 Объявлены в файле SysUtils.hpp
Может поюзай, по просматривай в отладчике результаты их работы... По крайней мере копия твоего файла создается в директории оригинала и его имя ты уже знаешь.
Строку директории с вырезкой середины придется обработать самостоятельно ручками с привязкой к слэшам через призму длины конечной строки, у тебря все-таки в заголовке действительно места не так уж много и строки подворачивать не будешь))) Хотя, можно заголовок отрисовать самому со всеми наваротами, но жизнь слишком коротка)) Не претендую на правоту, просто высказал первое, что в голову пришло.
PM MAIL   Вверх
500mhz
Дата 19.11.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



GetCommandLine не? )))


--------------------

PM MAIL ICQ   Вверх
Нитонисе
Дата 19.11.2011, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(MAXIQ @  19.11.2011,  04:44 Найти цитируемый пост)
extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName);extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);

Эти функции дают не тот результат.

Цитата(500mhz @  19.11.2011,  10:16 Найти цитируемый пост)
GetCommandLine не? )))

Пример использования? Да и аргументы командной строки возвращаются функцией ParamStr, не? Так вот первый аргумент - это exe-приложение, а второй - запускаемый файл, но не тот, по которому я дважды кликнул, а какая-то его копия.
PM MAIL   Вверх
sawfish
Дата 22.11.2011, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Цитата

В переменной ParamStr(1) имя какого-то другого файла, по всей видимости копии.

Почему вы так решили?
Цитата

Где взять имя нужного мне файла с путем  нему?

В ParamStr(1) как раз должно быть имя файла с путем к нему.
Цитата

Я хочу в Caption главной формы поместить имя запускаемого файла.

Зачем? ИМХО это неудобно. Можно извлечь имя и поместить его в заголовок, а полное (с путем) хранить в отдельной переменной.
Код

SomeForm->Caption=ExtractFileName(ParamStr(1));                              

PM MAIL   Вверх
borisbn
Дата 22.11.2011, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(Нитонисе @  18.11.2011,  20:09 Найти цитируемый пост)
Я хочу в Caption главной формы поместить имя запускаемого файла

Цитата(bcb_help_ParamStr)
ParamStr(0) returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE).


Цитата(Нитонисе @  18.11.2011,  20:09 Найти цитируемый пост)
Дополнительный вопрос. Как отображать имя файла, если путь к нему длинный? Что-то наподобие С:\MyFiles\...\Project\File.my.

PathCompactPath


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Нитонисе
Дата 22.11.2011, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(sawfish @  22.11.2011,  07:48 Найти цитируемый пост)
Почему вы так решили?

Потому что я вижу совсем другое название. Или не верить глазам своим?  smile 

Цитата(sawfish @  22.11.2011,  07:48 Найти цитируемый пост)
Зачем? ИМХО это неудобно. Можно извлечь имя и поместить его в заголовок, а полное (с путем) хранить в отдельной переменной.

Так я в заголовок (Caption) и хочу кинуть имя файла. Только вот оно не соответствует тому файлу, который я запустил.

Цитата(borisbn @  22.11.2011,  09:21 Найти цитируемый пост)
ParamStr(0) returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE).

Мне нужен не исполняемый файл exe, а ассоциированный с ним файл моего типа. Он в ParamStr(1). И хотя имя у него не такое, как у того, что я запускаю, если сохранить этот файл, то изменения произойдут и в том, который я запускал.
PM MAIL   Вверх
sawfish
Дата 22.11.2011, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Видимо, ТС имел ввиду файл File.my (см. первое сообщение).

Добавлено через 5 минут и 17 секунд
А в ParamStr(1) может возвращаться сокращенное имя (с тильдами). Тогда:
Цитата

You can obtain the long name of a file from the short name by calling the FindFirstFile function.



PM MAIL   Вверх
borisbn
Дата 22.11.2011, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(Нитонисе @  22.11.2011,  09:34 Найти цитируемый пост)
Мне нужен не исполняемый файл exe, а ассоциированный с ним файл моего типа

из этого
Цитата(Нитонисе @  18.11.2011,  20:09 Найти цитируемый пост)
Я хочу в Caption главной формы поместить имя запускаемого файла.

можно сделать вывод, что нужен exe (executable == запускаемый).

А вот на эту фразу
Цитата(Нитонисе @  22.11.2011,  09:34 Найти цитируемый пост)
И хотя имя у него не такое, как у того, что я запускаю, если сохранить этот файл, то изменения произойдут и в том, который я запускал.

смотрел минут 5 и ничего не понял


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Нитонисе
Дата 22.11.2011, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(borisbn @  22.11.2011,  11:12 Найти цитируемый пост)
можно сделать вывод, что нужен exe (executable == запускаемый).

Неверный вывод. Запускаемым может быть любой файл. Например "Абракадабра.doc". Что будет в ParamStr(0)?

Цитата(borisbn @  22.11.2011,  11:12 Найти цитируемый пост)
смотрел минут 5 и ничего не понял

Все очень просто на самом деле. Есть файл File.my. Он ассоциирован с приложением Program.exe. Кликаю (запускаю!) файл File.my - открывается приложение Program.exe и в него загружаются данные из файла File.my. При этом в Caption главной формы помещается ParamStr(1). Мне бы хотелось в данном случае там отобразилась надпись "File.my", но нет, там что-то типа "1431~.MY". Поработав с эти файлом я сохраняю изменения. Так вот изменения эти произошли как раз в файле "File.my". То есть получается что File.my и 1431~.MY - это суть один файл.
PM MAIL   Вверх
sawfish
Дата 22.11.2011, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Еще раз напишу.

А в ParamStr(1) может возвращаться сокращенное имя (с тильдами). Тогда:
Цитата

You can obtain the long name of a file from the short name by calling the FindFirstFile function.

PM MAIL   Вверх
Alca
Дата 22.11.2011, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



::GetFullPathName ?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Нитонисе
Дата 23.11.2011, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



sawfish, спасибо за подсказку, ваша функция решила проблему.
Функция FindFirstFile ищет файл ParamStr(1) и помещает инормацию о нем в структуру WIN32_FIND_DATA. Два поля этой структуры cAlternateFileName и cFileName содержат как раз имя непонятное файла с тильдой и оригинальное название соответственно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.