Главная страница
    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.047 c
6-1151406325
alex_pv1
2006-06-27 15:05
2006.11.19
Установить IP


5-1142922867
zorik
2006-03-21 09:34
2006.11.19
"Массив" объектов


4-1151583215
salexn
2006-06-29 16:13
2006.11.19
FSCTL_MOVE_FILE и шифрованные файлы


3-1158662881
SergP
2006-09-19 14:48
2006.11.19
Oracle и Port Mapping. Не могу подключиться...


15-1162303585
Crazybeaver
2006-10-31 17:06
2006.11.19
Чудеса на виражах. Каким образом выполнена эта технология?





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