Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Имена, пути файлов



Вернуться к списку функций
 Получение длинного имени файла по его короткому имени

 Прислал: Dimka Maslov (Санкт-Петербург) ( 29 апреля 2002 г. )
©  Dimka Maslov
 Описание:
Функция преобразует короткое имя файла в длинное.

 Зависимости:
Windows, SysUtils, Classes

 Ограничения:
Не поддерживается в D1-D3

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Получение длинного имени файла по его короткому имени

Функция преобразует короткое имя файла в длинное.

Зависимости: Windows, SysUtils, Classes
Автор:       Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        29 апреля 2002 г.
***************************************************************** }

function GetLongName(const FileName: string): string;
var
 GetLongPathName: function (pszShortName, pszLongName: PChar;
   cchBuffer: Integer): Integer stdcall;
 Handle: HINST;
 Buffer: array[0..MAX_PATH-1] of AnsiChar;

 function InternalGetLongName(FileName: string): string;
 var
  SearchRec: TSearchRec;
  FindResult: Integer;
  Path, S1, S2, SN: string;
 begin
  if (FileName = '') or
   (GetFileAttributes(PChar(FileName)) = $FFFFFFFF) then begin
   Result:='';
   Exit;
  end;
  Path:=ExtractFilePath(FileName);
  S1:=FileName;
  Delete(S1, 1, 1);
  if (Path<>'') and (S1<>':') and (S1<>'\') then begin
   FindResult:=FindFirst(Path+'*.*', faAnyFile, SearchRec);
   try
    Result:=FileName;
    SN:=ExtractFileName(FileName);
    while FindResult = 0 do begin
     S2:=SearchRec.Name;
     if (SN = S2) or (SN = SearchRec.FindData.cAlternateFileName) then begin
      Result:=InternalGetLongName(ExcludeTrailingBackslash(Path))+'\'+S2;
      Break;
     end;
     FindResult:=FindNext(SearchRec);
    end;
   finally
    FindClose(SearchRec);
   end;
  end else Result:=FileName;

 end;

begin
 Handle:=GetModuleHandle('kernel32.dll');
 @GetLongPathName:=GetProcAddress(handle, 'GetLongPathNameA');
 if Assigned(GetLongPathName) then begin
  if GetLongPathName(PChar(FileName), @Buffer[0], SizeOf(Buffer))<>0
   then Result:=PChar(@Buffer[0]) else Result:=FileName;
 end else Result:=InternalGetLongName(FileName);
end;


Вернуться к списку функций

Наверх ▲