Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];

Вниз

Как перевести короткий путь к файлу в длинный?   Найти похожие ветки 

 
Arhangel   (2002-05-08 13:38) [0]

Т.е. надо перевести, например:"C:\Мои до~1\qqqqqq~1.exe" в "C:\Мои документы\qqqqqqqqqqqqqqq.exe"


 
Arhangel   (2002-05-08 13:47) [1]

Нашел ответ в форуме, но он немного неточный, а вот и ответ:
В реестре надо написать в разделе \command myprog.exe "%L", тогда и имя файла будет полным и путь к ниму;)


 
Alx2   (2002-05-08 13:48) [2]

Сам не смотрел, извини, но, кажется вот это должно помочь.
DWORD GetFullPathName(

LPCTSTR lpFileName, // address of name of file to find path for
DWORD nBufferLength, // size, in characters, of path buffer
LPTSTR lpBuffer, // address of path buffer
LPTSTR *lpFilePart // address of filename in path
);


 
Alx2   (2002-05-08 14:25) [3]

А вот теперь посмотрел и выяснил, что наврал.
Решение такое:

Procedure TForm1.Button14Click(Sender: TObject);
Var
Str2: String;
GetLongPathName: Function (ShortPathName: PChar; LongPathName: PChar;
cchBuffer : Integer): Integer Stdcall;
Handle : THandle;
Begin
SetLength(Str2, 256);
Handle := GetModuleHandle("kernel32.dll");
If Handle = 0 Then exit;
@GetLongPathName := GetProcAddress(Handle, "GetLongPathNameA");
If Assigned(GetLongPathName) And
(GetLongPathName("C:\Мои до~1\qqqqqq~1.exe" , PChar(Str2), 256) <> 0) Then
Str2 := PChar(Str2)
else Str2 := "???";
// - Результат в Str2
End;




 
Alx2   (2002-05-08 14:29) [4]

А вот этот пример показывает как получить полный путь к временной директории исходя из ее короткого пути :)
(Дело в том, что GetTempPath дает путь в формате 8.3)

Procedure TForm1.Button14Click(Sender: TObject);
Var

Str, Str2 : String;
pch : PChar;

GetLongPathName: Function (ShortPathName: PChar; LongPathName: PChar;
cchBuffer : Integer): Integer Stdcall;
Handle : THandle;
Begin
SetLength(Str, 256);
SetLength(Str2, 256);
GetTempPath(256, PChar(Str));
Str := PChar(Str);
ShowMessage(Str);
Handle := GetModuleHandle("kernel32.dll");
If Handle = 0 Then exit;
@GetLongPathName := GetProcAddress(Handle, "GetLongPathNameA");
If Assigned(GetLongPathName) And
(GetLongPathName(PChar(Str), PChar(Str2), 256) <> 0) Then
Str2 := PChar(Str2)
Else Str2 := "???";
ShowMessage(Str2);
End;



 
DrVasko   (2002-05-08 18:05) [5]

> Alx2
А зачем GetFullPathName из длл вытаскивать. Она вроде как в модуле Windows уже прописана?
Кроме того она только путь переводит. А для имени файла нужна FindFirstFile.


 
Alx2   (2002-05-13 08:03) [6]

>DrVasko (08.05.02 18:05)
>А зачем GetFullPathName из длл вытаскивать.
Я ее не вытаскиваю :)
>Она вроде как в модуле Windows уже прописана?

Она-то прописана, а вот это - нет: (у меня D5)
@GetLongPathName := GetProcAddress(Handle, "GetLongPathNameA"

>Кроме того она только путь переводит.

Неправда. GetLongPathName имя файла тоже переводит. Проверил.


 
Dimka Maslov   (2002-05-13 13:55) [7]

Господа!
Не забывайте что есть UBPFD, там масса полезных примеров:
http://delphibase.endimus.com/?action=viewtopic&topic=filenames


 
Alx2   (2002-05-13 14:12) [8]

А почему так длинно-то?


 
Alx2   (2002-05-13 14:15) [9]

А, понял!
Потому-что не везде есть нужная функция :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.038 c
1-73166
mifi
2002-05-13 23:08
2002.05.23
рлык TO form


4-73456
Alex_LG
2002-03-23 17:21
2002.05.23
Как получить хендл и (или) ссылку на ресурсы ({$R файл.res})?


1-73152
chsv
2002-05-13 19:58
2002.05.23
ширина ComboBox и его списка


14-73392
Draculenok
2002-04-15 09:21
2002.05.23
бесплатные звонки


14-73401
Baz
2002-04-16 15:16
2002.05.23
Паладин! Хелп!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский