Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.23;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-73222
ДЖИН
2002-05-14 23:38
2002.05.23
Класс TStrings


4-73458
DNT
2002-03-24 11:57
2002.05.23
Трей и мышка


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


14-73376
Михалыч
2002-04-10 16:40
2002.05.23
Для умных


1-73262
lipskiy
2002-05-10 15:27
2002.05.23
Как поставить курсор в Edit в начало блока выделения?