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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.08 c
2-1162230622
Kent25791
2006-10-30 20:50
2006.11.19
Pos и дин. массив


2-1162560297
kyn66
2006-11-03 16:24
2006.11.19
ListBox как подобие ListView


3-1158649941
PEAKTOP
2006-09-19 11:12
2006.11.19
BLOB+HTML


15-1162546558
Ламот
2006-11-03 12:35
2006.11.19
Win2000 Server и планировщик заданий


2-1162383897
Сергей И
2006-11-01 15:24
2006.11.19
Помогите с вопросом Ini файлов!





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