ExtractShortPathName, функция

Синтаксис


function ExtractShortPathName(const FileName:  string):  string;

Описание

Функция ExtractShortPathName преобразует FileName в короткое имя (8.3). Если FileName уже является коротким именем, оно возвращается без изменений. Если файл не существует, возвращается пустая строка.
Заметьте, что функции ExtractLongPathName не существует, т. к. большинство операционных систем семейства Windows не имеют функций API для получения длинного имени. Вместо этого можно использовать функцию GetLongPathName из примера

Ошибки

Советы и приемы

Пример


// Разделяет путь на часть, содержащую букву диска и каталог, и
// часть, содержащую имя файла. Если путь является именем UNC, имя
// разделяемого ресурса остается в первой части.
procedure ExtractFileParts(const Path: string;
                           var Directory, Name: string);
var
  I: Integer;
begin
  // Получаем букву диска или имя хоста UNC и имя
  // разделяемого ресурса. В SysUtils нет подходящей
  // для этого функции.
  I := LastDelimiter('\:', Path);
  Name := Copy(Path, I + 1, MaxInt);
  if (I > 1) and
     (Path[I] = '\') and
     (not (Path[I - 1] in ['\', ':']) or
     (ByteType(Path, I - 1) = mbTrailByte)) then
        Dec(I);
  Directory := Copy(Path, 1, I);
  // Если Directory состоит только из хоста UNC, значит, мы
  // в Name извлекли имя разделяемого ресурса.
  if (Length(Directory) > 2) and (Directory[1] = '\') and
    (LastDelimiter('\', Directory) = 2) then
  begin
    Directory := Path;
    Name := '';
  end;
end;

function GetLongPathName(const PathName: string): string;
var
  Directory, FileName, FullName: string;
  LongName: string;
//  Info: TShFileInfo;
begin
  FullName := ExcludeTrailingBackslash(PathName);
  repeat
    ExtractFileParts(FullName, Directory, FileName);
    if FileName = '' then
      // Если путь состоит только из буквы диска, дальнейшее
      // раскрытие не требуется.
      LongName := IncludeTrailingBackSlash(Directory)
    else if SHGetFileInfo(PChar(FullName), 0, Info, SizeOf(Info),
                          Shgfi_DisplayName) = 0 then
       begin
         // Невозможно развернуть имя файла.
         Result := '';
         Exit;
       end
       else
         LongName := Info.szDisplayName;
    // Убедимся, что обратные косые черты включены в результат.
    if Result = '' then
      Result := LongName
    else
      Result := IncludeTrailingBackslash(LongName) + Result;
    FullName := Directory;
  until FileName = '';
end;

Смотрите также

    Учебник по языку Pascal          Лабораторные работы по программированию          Справочник




Нет комментариев.



Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: