Листинг 4.18.

Преобразование пути из короткой в длинную форму

function ShortPathToLong(path: String): String;

var

buffer: String;

len: Integer;

begin

SetLength(buffer, MAX_PATH);

len := GetLongPathName(PAnsiChar(path), PAnsiChar(buffer),

MAX_PATH);

SetLength(buffer, len);

ShortPathToLong := buffer;

end;

При тестировании последнего листинга в Delphi 7 выяснилось, что API-функция GetLongPathName объявлена в модуле Windows. Возможно, в более старых или новых версиях Delphi это не так. Но в любом случае импортировать эту функцию из библиотеки Kernel32. dll предельно просто, достаточно поместить в модуль следующую строку:

...

function GetLongPathName(lpszLongPath: PChar;

lpszShortPath: PChar; cchBuffer: DWORD): DWORD;

stdcall; external kernel32 name \'GetLongPathNameA\

Преобразование абсолютного пути в относительный и наоборот

Теперь пришла очередь рассмотреть реализацию преобразований между абсолютной и относительной формами путей. Однако сначала рассмотрим небольшую, но полезную процедуру, используемую при преобразованиях. Процедура GetPathElements (листинг 4.19) формирует список строк из компонентов переданного ей пути (имен каталогов и имени целевого файла или каталога).

...

Листинг 4.19.

Разбиение пути на составляющие

procedure GetPathElements(path: String; elements: TStrings);

var

start, pos: Integer;

begin

start := 1;

for pos := 1 to Length(path) do

if path[pos] = \'\\' then

begin

if start <> pos then

//Выделим имя каталога

elements.Add(Copy(path, start, pos – start))

else

//Сочетание типа \'\\\' в середине пути пропускаем

;

start := pos + 1;

end;

pos := Length(path) + 1;

if start <> pos then

//Выделим имя последнего каталога или файла

elements.Add(Copy(path, start, pos – start));

end;

После применения процедуры GetPathElements работать с компонентами пути становится очень удобно, да к тому же и упрощается код функций преобразования, так как при их написании не нужно уделять внимание правильному выделению подстрок из строки полного пути.

Функция преобразования абсолютного пути в относительный (от заданной в параметре curdir папки) приводится в листинге 4.20.

...
Перейти на страницу:

Похожие книги