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

Листинг 4.21.

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

function RelativePathToRelative(path, curdir: String): String;

var

pathElements, curElements: TStrings;

outPath: String;

i: Integer;

begin

//Получение списка составляющих абсолютного и текущего пути

pathElements := TStringList.Create;

GetPathElements(path, pathElements);

curElements := TStringList.Create;

GetPathElements(curdir, curElements);

//Изначально находимся в последней папке пути curdir

//"Путешествуем" от текущей папки вверх или вниз

//по дереву каталогов

//(прибавляя или удаляя компоненты пути в список curElements)

for i := 0 to pathElements.Count–1 do

begin

if pathElements[i] = \'..\' then

//Вверх по дереву

if (curElements.Count > 0)then

curElements.Delete(curElements.Count – 1)

else

curElements.Append(\'..\')

else if pathElements[i] <> \'.\' then

//Вниз по дереву (знак текущей папки "." не изменяет

//положение)

curElements.Append(pathElements[i]);

end;

//Формируем результирующий путь

if (curElements.Count > 0) then outPath := curElements[0];

for i := 1 to curElements.Count-1 do

outPath := outPath + \'\\' + curElements[i];

RelativePathToRelative := outPath;

//Списки строк больше не нужны

pathElements.Free;

curElements.Free;

end;

Поиск

Поиск является неотъемлемой частью работы с файловой системой. Даже простой просмотр содержимого любого каталога сопряжен с использованием простейших, но все-таки поисковых средств (перебор и, возможно, отсеивание элементов каталога). Поэтому далее мы рассмотрим возможные варианты реализации двух удобных функций поиска: поиск по маске и атрибутам файлов в пределах заданной папки и такой же поиск по всему дереву каталогов, начиная от заданной корневой папки. Все рассмотренные далее функции поиска можно найти в модуле Search, расположенном на диске, в папке с названием подраздела.

Но сначала немного сведений о масках для поиска и атрибутах файлов (и папок).

Маски и атрибуты

Маска имени файла или папки представляет собой строку, в которой неизвестный одиночный символ можно менять на? а произвольное количество (0 и более) неизвестных заранее символов – на *. Остальные (допустимые в имени) символы обозначают сами себя. Например, имена файлов SomeFile. ехе и Some. ехе удовлетворяют каждой из масок: Some* и Some*. ехе.

Атрибуты определяют некоторые важные особенности файла. Так, например, при просмотре каталога при помощи API-функций папка может отличаться от файла только наличием атрибута FILE_ATTRIBURE_DIRECTORY. Вообще содержимое папки (директории, каталога) записано на диске в самый обычный файл. Его отличает наличие указанного неизменяемого вручную атрибута и строго заданный формат записей, а также наличие специальных функций, скрывающих от нас все особенности работы с данными каталога (открытие файла, поиск нужных записей).

Итак, далее об атрибутах. Ниже приводится перечень наиболее часто используемых атрибутов файлов и каталогов (идентификаторы целочисленных констант, объявленных в модуле Windows). Если не сказано иное, атрибут можно изменить.

• FILE_ATTRIBUTE_ARCHIVE – архивный файл или каталог (на опыте замечено, что этот атрибут появляется практически у всех файлов, находящихся на диске некоторое время);

• FILE_ATTRIBUTE_DIRECTORY – атрибут каталога (атрибут нельзя самостоятельно снять или назначить);

• FILE_ATTRIBUTE_HIDDEN – скрытый файл или каталог;

• FILE_ATTRIBUTE_NORMAL – означает отсутствие особых атрибутов у файла или каталога (у последнего, естественно, всегда установлен атрибут FILE_ ATTRIBUTE_DIRECTORY);

• FILE_ATTRIBUTE_READONLY – файл или каталог только для чтения;

• FILE_ATTRIBUTE_SYSTEM – системный файл или каталог;

• FILE_ATTRIBUTE_TEMPORARY – временный файл (файловая система стремится по возможности хранить все содержимое открытого временного файла в памяти для ускорения доступа к находящимся в нем данным).

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

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