Постановка задачи.
Задача заключается в разработке файловой оболочки для операционной системы Windows’95/98. В программе реализовать механизмы копирования, переноса, удаления, переименования файлов и директорий, поиск файлов по маске, просмотр списка файлов по маске, просмотр и редактирование файлов во внешних редакторах, присвоение и получение атрибутов файла, присвоение атрибутов группе файлов, запуск приложений со строкой параметров, создание директории, определение размера директории, получение информации о диске, настройки интерфейса программы, определение суммарного объёма дискового пространства занимаемого группой файлов, восстановление интерфейсных параметров при повторном запуске программы. Так же обеспечить управление оболочкой при помощи манипулятора типа «мышь» и клавиатуры.
Метод реализации.
Для реализации поставленной задачи необходимо создать интерфейс пользователя состоящий из таких компонент:
А) список директорий.
Б) список файлов
В) список дисков
Г) главное меню программы
Д) панель инструментов.
Для организации интерфейса пользователя будут использованы стандартные визуальные компоненты Delphi 3.0. Для реализации механизма копирования/вставки1 необходимо запомнить список копируемых файлов/директорий, каждый элемент списка должен содержать информацию о месте нахождения файла/директории и имени файла/директории. При копировании группы файлов или одного файла необходимо определить их место положение в иерархии каталогов, а затем заполнить список, выбирая все файлы отмеченные пользователем из списка файлов показанного в интерфейсной части программы (списке файлов). При копировании директории необходимо также определить её положение и произвести сканирование самой директории с сохранением в списке имён файлов содержащихся в копируемой директории и структуры каталогов. Для вставки директории в место копирования, необходимо воссоздать её структуру, а затем скопировать в неё файлы. Для осуществления этого процесса вышеупомянутый список разбивается на два. В первом списке (назовем его временный список директорий) должна находиться структура каталогов, а во втором (временном списке файлов) расположенные в этих каталогах файлы. Два списка необходимы для уменьшения времени затраченного на копирование, так как при наличии одного списка необходим анализ каждого элемента списка на предмет наличия поддиректорий и создание этих поддиректорий в месте копирования, а в копируемой директории в большинстве случаев количество директорий меньше чем количество файлов и времени на проверку понадобиться больше, чем при использовании двух списков.
Если же использовать два списка то для воссоздания структуры каталогов необходимо лишь отсортировать временный список директорий в соответствии с иерархией каталогов, и создавать директории проходя по списку сверху вниз. Так как после сортировки, директории расположенные на верхних уровнях вложенности каталогов будут находиться в верхней части списка, а директории расположенные на нижних уровнях будут находиться в конце списка. После воссоздания структуры директории остаётся только переписать файлы.
Алгоритм заполнения временных списков показан на рисунке 1 в виде блок схемы. Реализация данного алгоритма будет базирована на использовании функций FindFirst и FindNext, эти функции осуществляют просмотр содержимого указанной директории и в качестве результата возвращают имя найденного элемента, его атрибуты, время создания и размер. При анализе атрибутов найденного элемента можно определить данный элемент директория или файл, и в соответствии с анализом записать его имя и положение в соответствующий список. На описанном алгоритме будет базирован также механизм удаления директории.
Упомянутые выше функции FindFirst и FindNext будут также применены при реализации механизма поиска файлов по маске.
Описание программы.
Программа реализована на языке паскаль с использованием
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.AttrfaDirectory) 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.Panels[0].Text)+1);
FindForm.FileWasFind.Refresh;
end;
// выполнять поиск пока не закончатся файлы в текущей области заданной области.
Until((FindNext(F) 0));
FindClose(F);
end;
подкаталоги, сравнивается имя найденного файл с маской поиска, и если все наложенные ограничения выполнены, найденный файл заносится в список предлагаемый пользователю для просмотра. Для организации поиска в разных областях изменяется лишь место первого вызова рекурсивной процедуры.
В форме поиска файлов возможен переход к выбранному файлу, из списка найденных, а также запуск либо просмотр/редактирование во внешнем редакторе.
Копирование / Удаление директорий:
Описанная выше реализация алгоритма поиска файлов применёна в реализации копирования и удаления директорий3. При реализации рассматриваемых процессов понадобится наличие двух временных списков: списка директорий и списка файлов (каждая строка обоих списков включает в себя «полный путь» (FULL PATH)) файла/директории. Для реализации временных списков использован визуальная компонента ListBoх, данная компонента представляет собой динамический список строк и набор процедур и функций для управления этим списком. Заполнение этих списков осуществляется при помощи просмотра директории. С листингом программы реализующем эти процессы вы можете ознакомиться в приложении 1 на страницах (17,23-27). Для копирования/удаления директорий составляются оба вышеупомянутых списка. При вставке директории создаётся полное дерево директории, а затем происходит копирование файлов4. При удалении директории так же составляются оба списка, но так как стандартной процедуры удаляющей не пустую директорию нет, то в начале удаляются все файлы в удаляемой директории (включая файлы находящиеся в поддиректориях), а затем пустые директории.
Анализ результатов.
Программа имеет все необходимые функции работы с файлами. Все функции можно активизировать нажатием комбинации клавиш. Производиться статистика копирования, переноса, удаления файлов/директорий в удобной для восприятия пользователем форме. Существует простой механизм наложения фильтра на показываемые файлы. При изменении интерфейса программы, все изменения сохраняются и будут восстановлены при следующем запуске. Запуск приложений со строкой параметров с указанием типа запуска. Вывод сообщения о количестве поддиректорий в директории и о количестве файлов расположенных в ней. Определение размера директории присвоение атрибутов группе файлов простым нажатием двух клавиш.
Выводы.
В ходе работы была разработана программа манипулирования файлами и директориями.
В программе реализованы следующие механизмы:
копирования, переноса, удаления, переименования файлов и директорий,
поиск файлов по маске,
наложение фильтра на список файлов,
просмотр и редактирование файлов во внешних редакторах,
присвоение и получение атрибутов файла,
присвоение атрибутов группе файлов,
запуск приложений со строкой параметров,
создание директории,
определение размера директории,
получение информации о диске,
настройки интерфейса программы,
определение суммарного объёма дискового пространства занимаемого группой файлов,
восстановление интерфейсных параметров при повторном запуске программы.
Программа имеет удобный интерфейс и может использоваться для работы пользователями с разным уровнем знаний.
Системные требования: Операционная система Windows’95 и выше, 500 килобайт дискового пространства.
Литература.
П. Туротт, Г. Брент, Р. Багдазиан, С.Тендон «DELPHI 3», DiaSoft, Киев, 1997 г.
... ; end; procedure TMainForm.DeleteClick(Sender: TObject); //Удаление файлов begin AskDeleteForm.Show; end; procedure TMainForm.FileMenuPopup(Sender: TObject); //Определение видимых строк в контектсном меню файловой области //в момент его вызова begin if MainForm.FileList.SelCount=0 then begin with MainForm.FileMenu do begin Delete.Enabled:=False; Cut.Enabled:=False; ...
... для таблиц dBASE и Paradox. С использованием этих компонентов создание программы просмотра и редактирования базы данных почти не требует программирования. Win 3.1. На этой странице находятся компоненты Delphi 1.0, возможности которых перекрываются аналогичными компонентами Windows 95. Internet. Эта страница предоставляет компоненты для разработки приложений, позволяющих создавать HTML ...
... этого в диалоговом окне Сохранить в списке Тип файла следует выбрать вариант Только текст (*.txt). 2.4.2. Форма приложения Delphi позволяет объединить компоненты в массив, однако создаваться такие компоненты должны не во время разработки формы приложения, а динамически - во время работы программы. На форме отсутствуют поля вывода альтернативных ответов и переключатели выбора правильного ...
... отдела кадров Язык программирования Delphi 6.0 Необходимое ПО Операционная система Windows 98/2000 Функциональное назначение программы В рамках данного дипломного проекта разработано автоматизированное рабочее место для учета служащих предприятия работниками отдела кадров для оптимизация работы служащих отдела кадров. Вызов и загрузка программы Для запуска программы необходимо скопировать ...
0 комментариев