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

Вниз

Получть из пути с короткими именами путь с длинными именами   Найти похожие ветки 

 
jTommy   (2006-11-02 01:22) [0]

Казалось бы простейшая задача... Вообщем возможно ли из пути с короткими именами получить путь с длинными именами? Например из "C:\PROGRA~1\THEBAT~1\" получить "C:\Program Files\The Bat\"


 
Джо ©   (2006-11-02 01:36) [1]

GetLongPathName, странно, да? ;)


 
Германн ©   (2006-11-02 01:38) [2]

Где-то, когда-то, кто-то мне подсказал вариант:
{function GetFullPathNameW(lpFileName: PWideChar; nBufferLength: DWORD;
 lpBuffer: PWideChar; var lpFilePart: PWideChar): DWORD; stdcall;}
function GetLongFName(FName: String): String;
var
 Str2: String;
 GetLongPathName: Function (ShortPathName: PChar; LongPathName: PChar;
  cchBuffer : Integer): Integer Stdcall;
 Handle     : THandle;
begin
 Result:="";
 GetLongPathName:=nil;
 SetLength(Str2,256);
 Handle:=GetModuleHandle("kernel32.dll");
 if Handle = 0 then exit;
 @GetLongPathName := GetProcAddress(Handle, "GetLongPathNameA");
 if Assigned(GetLongPathName) and (GetLongPathName(PChar(FName),PChar(Str2),256) <> 0)
 then Result:=Str2;
end;


 
MikePetrichenko ©   (2006-11-02 02:18) [3]


> Германн ©   (02.11.06 01:38) [2]
> Где-то, когда-то, кто-то мне подсказал вариант:

Зачем же так автора пугать?


 
Ketmar ©   (2006-11-02 02:20) [4]

>[3] MikePetrichenko(c) 2-Nov-2006, 02:18
>Зачем же так автора пугать?
а чтобы не думал, что жить легко.


 
Германн ©   (2006-11-02 02:50) [5]


> MikePetrichenko ©   (02.11.06 02:18) [3]
>
>
> > Германн ©   (02.11.06 01:38) [2]
> > Где-то, когда-то, кто-то мне подсказал вариант:
>
> Зачем же так автора пугать?
>

Поясни, плиз! Чем и как я кого--то "испугал"?


 
MikePetrichenko ©   (2006-11-02 03:58) [6]


> {function GetFullPathNameW(lpFileName: PWideChar; nBufferLength:
>  DWORD;
>  lpBuffer: PWideChar; var lpFilePart: PWideChar): DWORD;
>  stdcall;}
> function GetLongFName(FName: String): String;
> var
>  Str2: String;
>  GetLongPathName: Function (ShortPathName: PChar; LongPathName:
>  PChar;
>   cchBuffer : Integer): Integer Stdcall;
>  Handle     : THandle;
> begin
>  Result:="";
>  GetLongPathName:=nil;
>  SetLength(Str2,256);
>  Handle:=GetModuleHandle("kernel32.dll");
>  if Handle = 0 then exit;
>  @GetLongPathName := GetProcAddress(Handle, "GetLongPathNameA");
>
>  if Assigned(GetLongPathName) and (GetLongPathName(PChar(FName),
> PChar(Str2),256) <> 0)
>  then Result:=Str2;
> end;

Проще надо быть :)


 
Германн ©   (2006-11-02 13:25) [7]


> MikePetrichenko ©   (02.11.06 03:58) [6]
>
> Проще надо быть :)

Да я бы и не против, но в сабже указано Д6, а не Д2006!


 
jTommy   (2006-11-02 14:12) [8]

Определил функцию в dpr-файле (программа консольная):
[code]
Function GetLongPathName(ShortPathName: PChar; LongPathName: PChar; cchBuffer: Integer): Integer; external "kernel32.dll" name "GetLongPathNameA";
[/code]
Не работает... Перенес в отдельный модуль:
[code]
interface

Function GetLongPathName(ShortPathName: PChar; LongPathName: PChar; cchBuffer: Integer): Integer; stdcall;

implementation

Function GetLongPathName(ShortPathName: PChar; LongPathName: PChar; cchBuffer: Integer): Integer; external "kernel32.dll" name "GetLongPathNameA";
[/code]
Работает... Странно, видимо надо обновить свои знания о дин. библиотеках.
Вариант Германна конечно тоже работает, даже все ясно что там и для чего :)
Вообщем, всем большое спасибо.


 
Джо ©   (2006-11-02 14:26) [9]

> Определил функцию в dpr-файле (программа консольная):
> Function GetLongPathName(ShortPathName: PChar; LongPathName:
> PChar; cchBuffer: Integer): Integer; external "kernel32.dll"
> name "GetLongPathNameA";


 
Джо ©   (2006-11-02 14:27) [10]

> Определил функцию в dpr-файле (программа консольная):
> Function GetLongPathName(ShortPathName: PChar; LongPathName:
> PChar; cchBuffer: Integer): Integer; external "kernel32.dll"
> name "GetLongPathNameA";
> Не работает...

А где stdcall?


 
jTommy   (2006-11-02 15:28) [11]


> Джо ©   (02.11.06 14:27) [10]
> А где stdcall?

Вот, я так и думал, что какая-нибудь мелочь.



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

Текущий архив: 2006.11.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.042 c
15-1162317007
Jorjer
2006-10-31 20:50
2006.11.19
Спасём Caps Lock!


3-1158651489
term1t
2006-09-19 11:38
2006.11.19
Comand is missing required clause


6-1148946937
nikitian
2006-05-30 03:55
2006.11.19
Проблема с кодировкой в indySMTP


15-1162464326
GRAND25
2006-11-02 13:45
2006.11.19
А как вам звонят 1С франчайзи?


5-1142928524
Neo Trinitron
2006-03-21 11:08
2006.11.19
Проблема с Items





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский