Программирование и комп-ры

Файловая оболочка (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 Если объём копируемых файлов превышает объём пустого места в месте
назначения, копирование произведено не будет



смотреть на рефераты похожие на "Файловая оболочка (Delphi 30 )"