| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Как узнать имя запускаемого файла |
| Автор: Нитонисе 18.11.2011, 20:09 |
| Есть программа Program.exe. Есть файл File.my. Установлена ассоциативная связь между программой Program.exe и файлами типа *.my. При запуске файла File.my открывается программа Program.exe и заполняется данными из файла. Я хочу в Caption главной формы поместить имя запускаемого файла. В переменной ParamStr(1) имя какого-то другого файла, по всей видимости копии. Где взять имя нужного мне файла с путем нему? Дополнительный вопрос. Как отображать имя файла, если путь к нему длинный? Что-то наподобие С:\MyFiles\...\Project\File.my. То есть смысл что средняя часть прячется троеточием, при этом общая строка укорачивается. |
| Автор: MAXIQ 19.11.2011, 04:44 |
| extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName); extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName); Объявлены в файле SysUtils.hpp Может поюзай, по просматривай в отладчике результаты их работы... По крайней мере копия твоего файла создается в директории оригинала и его имя ты уже знаешь. Строку директории с вырезкой середины придется обработать самостоятельно ручками с привязкой к слэшам через призму длины конечной строки, у тебря все-таки в заголовке действительно места не так уж много и строки подворачивать не будешь))) Хотя, можно заголовок отрисовать самому со всеми наваротами, но жизнь слишком коротка)) Не претендую на правоту, просто высказал первое, что в голову пришло. |
| Автор: 500mhz 19.11.2011, 10:16 |
| GetCommandLine не? ))) |
| Автор: sawfish 22.11.2011, 07:48 | ||||||||
Почему вы так решили?
В ParamStr(1) как раз должно быть имя файла с путем к нему.
Зачем? ИМХО это неудобно. Можно извлечь имя и поместить его в заголовок, а полное (с путем) хранить в отдельной переменной.
|
| Автор: borisbn 22.11.2011, 09:21 | ||||||
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773575(v=vs.85).aspx |
| Автор: Нитонисе 22.11.2011, 09:34 | ||||
Потому что я вижу совсем другое название. Или не верить глазам своим?
Так я в заголовок (Caption) и хочу кинуть имя файла. Только вот оно не соответствует тому файлу, который я запустил.
Мне нужен не исполняемый файл exe, а ассоциированный с ним файл моего типа. Он в ParamStr(1). И хотя имя у него не такое, как у того, что я запускаю, если сохранить этот файл, то изменения произойдут и в том, который я запускал. |
| Автор: sawfish 22.11.2011, 09:39 | ||
| Видимо, ТС имел ввиду файл File.my (см. первое сообщение). Добавлено через 5 минут и 17 секунд А в ParamStr(1) может возвращаться сокращенное имя (с тильдами). Тогда:
|
| Автор: borisbn 22.11.2011, 11:12 | ||||||
из этого
можно сделать вывод, что нужен exe (executable == запускаемый). А вот на эту фразу
смотрел минут 5 и ничего не понял |
| Автор: Нитонисе 22.11.2011, 17:29 |
Неверный вывод. Запускаемым может быть любой файл. Например "Абракадабра.doc". Что будет в ParamStr(0)? Все очень просто на самом деле. Есть файл File.my. Он ассоциирован с приложением Program.exe. Кликаю (запускаю!) файл File.my - открывается приложение Program.exe и в него загружаются данные из файла File.my. При этом в Caption главной формы помещается ParamStr(1). Мне бы хотелось в данном случае там отобразилась надпись "File.my", но нет, там что-то типа "1431~.MY". Поработав с эти файлом я сохраняю изменения. Так вот изменения эти произошли как раз в файле "File.my". То есть получается что File.my и 1431~.MY - это суть один файл. |
| Автор: sawfish 22.11.2011, 18:19 | ||
| Еще раз напишу. А в ParamStr(1) может возвращаться сокращенное имя (с тильдами). Тогда:
|
| Автор: Alca 22.11.2011, 18:54 |
| ::GetFullPathName ? |
| Автор: Нитонисе 23.11.2011, 12:17 |
| sawfish, спасибо за подсказку, ваша функция решила проблему. Функция FindFirstFile ищет файл ParamStr(1) и помещает инормацию о нем в структуру WIN32_FIND_DATA. Два поля этой структуры cAlternateFileName и cFileName содержат как раз имя непонятное файла с тильдой и оригинальное название соответственно. |