Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Сокращенное имя файла


Автор: ActioN 4.5.2006, 00:00
Есть файл который находится здесь: C:\Program Files\my test file.txt. ParamStr(1) возвращает C:\Progra~1\MYTEST~1... Как преобразовать путь и имя файла в нормальный вид? Функция ExpandFileName не помагает, она только путь к файлу делает нормальным, а имя файла остается сокращенным.
Нашел вот такой вариант, но неужели ничего проще нету?smile
Код

    TSearchRec SearchRec;
    FindFirst(ParamStr(1),faAnyFile,SearchRec);
    String fName = ExtractFilePath(ExpandFileName(ExtractFileName(ParamStr(1))))+SearchRec.Name;
 

Автор: Romikgy 4.5.2006, 00:16
Цитата(ActioN @  3.5.2006,  23:00 Найти цитируемый пост)
C:\Program Files\my test file.txt

это командная строка , тлько где параметры?
тест или файл тхт? 

Автор: DigitalDummy 4.5.2006, 02:09
Цитата(ActioN @  4.5.2006,  00:00 Найти цитируемый пост)
неужели ничего проще нету?


Насколько мне известно, ничего проще нету, чем вызвать нужные API функции и вызов всего этого "завернуть" в свою функцию.
Но, по сути это получится тоже самое, что и приведённый Вами пример, потому что для получения полного имени файла средствами API надо использовать функцию FindFirstFile.

В идеале же, если программа разрабатывается для Windows 2000, XP или чего повыше, я бы рекомендовал использовать всё те же API функции для получения данных о путях и именах файлов таким образом, чтобы в программе участвовали только длинные имена файлов и папок. Может быть, даже, в Unicode формате. 

Автор: likehood 4.5.2006, 09:15
Как передаются параметры командной строки? Если так, то все должно работать:
Код

myprog.exe "C:\Program Files\my test file.txt"
 

Автор: SergeCpp 4.5.2006, 09:22
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getlongpathname.asp 

Автор: ActioN 5.5.2006, 00:18
Romikgy, несовсем Вас понял.
DigitalDummy, учтем.
baronp, проблема в том, что моя программа асоциирована с некоторым типом файла. Этот файл находится (к примеру) в вышеуказанной папке /Program Files/... и при двойном клике на нем из проводника запускается программа и узнается имя запускаемого файла.
SergeCpp, в MSDN написано: Client: Requires Windows XP, Windows 2000 Professional, Windows Me, or Windows 98. То есть на Windows 95 программа, используемая эту функцию не запустится? 

Автор: DigitalDummy 5.5.2006, 01:21
Цитата(ActioN @  5.5.2006,  00:18 Найти цитируемый пост)
То есть на Windows 95 программа, используемая эту функцию не запустится?

 smile В том то всё и дело, что в Windows 95 данная функция не реализована. То есть, для этой системы придётся свою функцию писать, как я уже говорил выше. Но если Вам не нужна поддержка работы вашей программы в этой системе, то мучаться не стоит. В этом случае, GetLongPathName() лучший выбор. SergeCpp верно подсказал. 

Автор: ActioN 6.5.2006, 00:32
DigitalDummy, спасибо, понял 

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