Форум: "Основная";
Текущий архив: 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.007 c