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 Лабораторные работы по программированию Справочник
|