Читаем Delphi. Трюки и эффекты полностью

Примечание

Большинство из перечисленных выше путей определяются только в системах Windows на ядре NT, но не в Windows 95/98/Ме.

Определение и установка текущей папки

Во время работы каждого приложения для него запоминается папка, которая считается текущей (для этого приложения). При грамотном управлении текущей папкой удобно использовать рассмотренные далее относительные пути.

Для определения текущей папки приложения можно воспользоваться функцией GetCurrentDir, приведенной в листинге 4.16.

...

Листинг 4.16.

Определение текущей папки

function GetCurrentDir(): String;

var

len: Integer;

buffer: String;

begin

SetLength(buffer, MAX_PATH + 1);

len := GetCurrentDirectory(MAX_PATH, PAnsiChar(buffer));

GetCurrentDir := Copy(buffer, 1, len);

end;

Функция определения пути текущей папки основана на применении соответствующей API-функции GetCurrentDirectory. Вполне естественно, что она имеет пару – функцию для задания текущего каталога SetCurrentDirectory. Объявление этой функции:

...

function SetCurrentDirectory(lpPathName: PChar): BOOL; stdcall;

Функция принимает путь папки и возвращает ненулевое значение в случае успешного выполнения.

Преобразование путей

Рассмотрим несколько функций, которые могут пригодиться, если возникнет необходимость преобразования путей. Имеется в виду прежде всего преобразование имен файлов в формат MS-DOS и обратно. Этот вид преобразования наглядно продемонстрирован на рис. 4.4 (верхняя часть формы).

Иногда оказывается полезным представлять пути относительно какой-нибудь папки, но не относительно корневого каталога диска. Например, представьте, что вы разрабатываете приложение, документы которого, являющиеся неделимыми для пользователя, могут фактически состоять из большого количества файлов, расположенных в разных папках (Images, Movies, Embed). Сами папки расположены в том же каталоге, где и основной файл документа, или ниже по иерархии (во вложенных папках). Как добиться того, чтобы при копировании приложения со всеми нужными папками в другое место (на другой диск или компьютер, в другую папку) его по-прежнему можно было открыть, при этом рассчитывая, что в папках Images, Movies и Embed содержится не только нужная информация. Последнее говорит о том, что приложение должно «знать», какие файлы и в каких папках ему действительно необходимы. В таком случае пригодится относительный путь, который несет в себе информацию о количестве и направлении переходов из каталога, заданного в качестве корневого, для того чтобы мы смогли найти указанный в этом пути файл или папку.

Преобразование из абсолютного в относительный путь и наоборот продемонстрировано на рис. 4.4 (нижняя часть формы). При этом в качестве исходного пути берется содержимое текстового поля Исходный длинный путь, а в качестве пути папки для построения относительного пути – содержимое поля Текущая папка.

Рис. 4.4. Преобразование путей

На всякий случай нужно уточнить, что в относительном пути элемент. указывает на текущую папку (никуда переходить не надо), а элемент. означает папку, расположенную на один уровень выше (родительскую папку). Также следует уточнить, что под абсолютным путем понимается путь, корневым элементом которого является \\ или <диск>: \ (С: \, D: \ их д.).

...

Примечание

Все приведенные далее функции преобразования вы можете найти в модуле PathConvert, расположенном на диске, в папке с названием подраздела.

Преобразование длинных имен файлов в короткие и наоборот

Теперь рассмотрим реализацию преобразования путей. Сначала – преобразование между длинной и короткой формами. Выполняется это предельно просто, благо Windows API предусматривает соответствующие функции.

Преобразование длинного пути в короткий приводится в листинге 4.17.

...

Листинг 4.17.

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

function LongPathToShort(path: String): String;

var

buffer: String;

len: Integer;

begin

SetLength(buffer, MAX_PATH);

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

MAX_PATH);

SetLength(buffer, len);

LongPathToShort := buffer;

end;

Соответственно, обратное преобразование пути может выглядеть следующим образом (листинг 4.18).

...

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

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

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Мейерс , Скотт Майерс

Программирование, программы, базы данных / Программирование / Книги по IT