Файловая оболочка (Delphi 30 )

Файловая оболочка (Delphi 30 )

1. Постановка задачи.

Задача заключается в разработке файловой оболочки для операционной

системы Windows’95/98. В программе реализовать механизмы копирования,

переноса, удаления, переименования файлов и директорий, поиск файлов по

маске, просмотр списка файлов по маске, просмотр и редактирование файлов во

внешних редакторах, присвоение и получение атрибутов файла, присвоение

атрибутов группе файлов, запуск приложений со строкой параметров, создание

директории, определение размера директории, получение информации о диске,

настройки интерфейса программы, определение суммарного объёма дискового

пространства занимаемого группой файлов, восстановление интерфейсных

параметров при повторном запуске программы. Так же обеспечить управление

оболочкой при помощи манипулятора типа «мышь» и клавиатуры.

2. Метод реализации.

Для реализации поставленной задачи необходимо создать интерфейс

пользователя состоящий из таких компонент:

А) список директорий.

Б) список файлов

В) список дисков

Г) главное меню программы

Д) панель инструментов.

Для организации интерфейса пользователя будут использованы

стандартные визуальные компоненты Delphi 3.0. Для реализации механизма

копирования/вставки[1] необходимо запомнить список копируемых

файлов/директорий, каждый элемент списка должен содержать информацию о

месте нахождения файла/директории и имени файла/директории. При копировании

группы файлов или одного файла необходимо определить их место положение в

иерархии каталогов, а затем заполнить список, выбирая все файлы отмеченные

пользователем из списка файлов показанного в интерфейсной части программы

(списке файлов). При копировании директории необходимо также определить её

положение и произвести сканирование самой директории с сохранением в списке

имён файлов содержащихся в копируемой директории и структуры каталогов. Для

вставки директории в место копирования, необходимо воссоздать её структуру,

а затем скопировать в неё файлы. Для осуществления этого процесса

вышеупомянутый список разбивается на два. В первом списке (назовем его

временный список директорий) должна находиться структура каталогов, а во

втором (временном списке файлов) расположенные в этих каталогах файлы. Два

списка необходимы для уменьшения времени затраченного на копирование, так

как при наличии одного списка необходим анализ каждого элемента списка на

предмет наличия поддиректорий и создание этих поддиректорий в месте

копирования, а в копируемой директории в большинстве случаев количество

директорий меньше чем количество файлов и времени на проверку понадобиться

больше, чем при использовании двух списков.

Если же использовать два списка то для воссоздания структуры каталогов

необходимо лишь отсортировать временный список директорий в соответствии с

иерархией каталогов, и создавать директории проходя по списку сверху вниз.

Так как после сортировки, директории расположенные на верхних уровнях

вложенности каталогов будут находиться в верхней части списка, а директории

расположенные на нижних уровнях будут находиться в конце списка. После

воссоздания структуры директории остаётся только переписать файлы.

Алгоритм заполнения временных списков показан на рисунке 1 в виде блок

схемы. Реализация данного алгоритма будет базирована на использовании

функций FindFirst и FindNext, эти функции осуществляют просмотр содержимого

указанной директории и в качестве результата возвращают имя найденного

элемента, его атрибуты, время создания и размер. При анализе атрибутов

найденного элемента можно определить данный элемент директория или файл, и

в соответствии с анализом записать его имя и положение в соответствующий

список. На описанном алгоритме будет базирован также механизм удаления

директории.

Упомянутые выше функции FindFirst и FindNext будут также применены при

реализации механизма поиска файлов по маске.

3. Описание программы.

Программа реализована на языке паскаль с использованием

Delphi 3.0 - среды визуального программирования приложений для Windows’95 .

Детально рассмотрим реализацию некоторых механизмов, таких как:

. Поиск файлов;

. Копирование Директорий;

. Удаление директорий.

Поиск файлов:

Поиск файлов в программе реализован с использованием маски. В маске

возможно использование служебного символа, замены группы неизвестных

символов в имени файла, или его расширении «*», а также возможен поиск с

различием регистров символов, и без такового, с указанием области поиска.

Так же существуют возможности поиска с наложением дополнительных

ограничений, таких как размер искомого файла, а так же времени создания

файла. Детально с реализацией выше перечисленных механизмов вы можете

ознакомиться в приложении 1 на страницах (29-35). Здесь же, мы рассмотрим

реализацию основной части этого механизма.

Для поиска файлов по маске необходимо задание маски поиска в виде

*.сом или autoexec.*, или другие возможные варианты, и области поиска[2]. В

качестве дополнительного параметра может быть задана проверка регистра

символов. Блок схема поиска файлов показана на рисунке 1. При поиске

используется рекурсивная процедура (текст 1.) в которой последовательно

просматривается область поиска, включая

Текст 1.

Procedure TFindForm.FindInCurrentDir(CurDir:string);

Var

SizeF:integer;

i:integer;

EndList:boolean;

F:TSearchRec;

D:string;

begin

{Вывод в статус строке директории в которой производится

поиск}

FindForm.StatusFind.Panels[1].Text:=CurDir;

FindFirst(CurDir+'*.*',faAnyFile,F);

FindNext(F);

repeat

// Проверка расширенного поиска

If FindForm.CBAdvSearch.Checked and

(F.Attr<>faDirectory) then

begin

// Проверка на размер найденного файла

// размер и время создания найденого файла должны находится

в пределах заданных

// пользователем

if not(((F.Size < StrToInt(FindForm.SLess.Text)) and

(F.Size > StrToInt(FindForm.SGreater.Text)))) then

Continue;

if

not(((FileDateTime(CurDir+F.Name)

FindForm.DateIsAfter.Date))) then Continue;

end;

// проверить не является ли найденый файл директорией

if F.Attr=faDirectory then

if (F.Name<>'.') and (F.Name<>'..') then

begin

// если найденный файл – директория ,

рекурсивный вызов поиска в данной директории

FindInCurrentDir(CurDir+F.Name+'\');

end;

if (F.Name<>'..') and (F.Name<>'.') then

// если файл подходит под маску, занести его в список

if CompareFileWithMask(F.Name) then

begin

FindForm.FileWasFind.Items.Add(CurDir+F.Name);

FindForm.StatusFind.Panels[0].Text:=IntToStr(StrToInt(FindForm.StatusFind.Pa

nels[0].Text)+1);

FindForm.FileWasFind.Refresh;

end;

// выполнять поиск пока не закончатся файлы в текущей области заданной

области.

Until((FindNext(F) <> 0));

FindClose(F);

end;

подкаталоги, сравнивается имя найденного файл с маской поиска, и если все

наложенные ограничения выполнены, найденный файл заносится в список

предлагаемый пользователю для просмотра. Для организации поиска в разных

областях изменяется лишь место первого вызова рекурсивной процедуры.

В форме поиска файлов возможен переход к выбранному файлу, из списка

найденных, а также запуск либо просмотр/редактирование во внешнем

редакторе.

Копирование / Удаление директорий:

Описанная выше реализация алгоритма поиска файлов применёна в

реализации копирования и удаления директорий[3]. При реализации

рассматриваемых процессов понадобится наличие двух временных списков:

списка директорий и списка файлов (каждая строка обоих списков включает в

себя «полный путь» (FULL PATH)) файла/директории. Для реализации временных

списков использован визуальная компонента ListBoх, данная компонента

представляет собой динамический список строк и набор процедур и функций для

управления этим списком. Заполнение этих списков осуществляется при помощи

просмотра директории. С листингом программы реализующем эти процессы вы

можете ознакомиться в приложении 1 на страницах (17,23-27). Для

копирования/удаления директорий составляются оба вышеупомянутых списка. При

вставке директории создаётся полное дерево директории, а затем происходит

копирование файлов[4]. При удалении директории так же составляются оба

списка, но так как стандартной процедуры удаляющей не пустую директорию

нет, то в начале удаляются все файлы в удаляемой директории (включая файлы

находящиеся в поддиректориях), а затем пустые директории.

4. Анализ результатов.

Программа имеет все необходимые функции работы с файлами. Все функции

можно активизировать нажатием комбинации клавиш. Производиться статистика

копирования, переноса, удаления файлов/директорий в удобной для восприятия

пользователем форме. Существует простой механизм наложения фильтра на

показываемые файлы. При изменении интерфейса программы, все изменения

сохраняются и будут восстановлены при следующем запуске. Запуск приложений

со строкой параметров с указанием типа запуска. Вывод сообщения о

количестве поддиректорий в директории и о количестве файлов расположенных в

ней. Определение размера директории присвоение атрибутов группе файлов

простым нажатием двух клавиш.

5. Выводы.

В ходе работы была разработана программа манипулирования файлами и

директориями.

В программе реализованы следующие механизмы:

копирования, переноса, удаления, переименования файлов и директорий,

поиск файлов по маске,

наложение фильтра на список файлов,

просмотр и редактирование файлов во внешних редакторах,

присвоение и получение атрибутов файла,

присвоение атрибутов группе файлов,

запуск приложений со строкой параметров,

создание директории,

определение размера директории,

получение информации о диске,

настройки интерфейса программы,

определение суммарного объёма дискового пространства занимаемого группой

файлов,

восстановление интерфейсных параметров при повторном запуске программы.

Программа имеет удобный интерфейс и может использоваться для работы

пользователями с разным уровнем знаний.

Системные требования: Операционная система Windows’95 и выше, 500 килобайт

дискового пространства.

6. Литература.

П. Туротт, Г. Брент, Р. Багдазиан, С.Тендон «DELPHI 3», DiaSoft, Киев,

1997 г.

-----------------------

[1] Механизм копирования разбит на две части копирование/вставка исходя из

предпологаемого интерфейса программы

2 Возможны 3 области поиска: поиск в текущей директории; поиск на текущем

диске; поиск на всех жестких дисках (также сетевых).

3 Перенос директорий не рассматривается ввиду того, что его алгоритм

является последовательной

комбинацией алгоритма копирования и алгоритма удаления.

4 Если объём копируемых файлов превышает объём пустого места в месте

назначения, копирование произведено не будет