скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Разработка файловой оболочки

Реферат: Разработка файловой оболочки

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

Задача заключается в разработке файловой оболочки для операционной системы Windows’95/98. В программе реализовать механизмы копирования, переноса, удаления, переименования файлов и директорий, поиск файлов по маске, просмотр списка файлов по маске, просмотр и редактирование файлов во внешних редакторах, присвоение и получение атрибутов файла, присвоение атрибутов группе файлов, запуск приложений со строкой параметров, создание директории, определение размера директории, получение информации о диске, настройки интерфейса программы, определение суммарного объёма дискового пространства занимаемого группой файлов, восстановление интерфейсных параметров при повторном запуске программы. Так же обеспечить управление оболочкой при помощи манипулятора типа “мышь” и клавиатуры.

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

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

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

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

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

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

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

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

Если же использовать два списка то для воссоздания структуры каталогов необходимо лишь отсортировать временный список директорий в соответствии с иерархией каталогов, и создавать директории проходя по списку сверху вниз. Так как после сортировки, директории расположенные на верхних уровнях вложенности каталогов будут находиться в верхней части списка, а директории расположенные на нижних уровнях будут находиться в конце списка. После воссоздания структуры директории остаётся только переписать файлы.

Алгоритм заполнения временных списков показан на рисунке 1 в виде блок схемы. Реализация данного алгоритма будет базирована на использовании функций FindFirst и FindNext, эти функции осуществляют просмотр содержимого указанной директории и в качестве результата возвращают имя найденного элемента, его атрибуты, время создания и размер. При анализе атрибутов найденного элемента можно определить данный элемент директория или файл, и в соответствии с анализом записать его имя и положение в соответствующий список. На описанном алгоритме будет базирован также механизм удаления директории.

Упомянутые выше функции FindFirst и FindNext будут также применены при реализации механизма поиска файлов по маске.

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

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

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

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

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

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

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

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

Поиск файлов в программе реализован с использованием маски. В маске возможно использование служебного символа, замены группы неизвестных символов в имени файла, или его расширении “*”, а также возможен поиск с различием регистров символов, и без такового, с указанием области поиска. Так же существуют возможности поиска с наложением дополнительных ограничений, таких как размер искомого файла, а так же времени создания файла. Детально с реализацией выше перечисленных механизмов вы можете ознакомиться в приложении 1 на страницах (29-35). Здесь же, мы рассмотрим реализацию основной части этого механизма.

Для поиска файлов по маске необходимо задание маски поиска в виде *.сом или autoexec.*, или другие возможные варианты, и области поиска. В качестве дополнительного параметра может быть задана проверка регистра символов. Блок схема поиска файлов показана на рисунке 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.DateIsBefore.Date) and (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;

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

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

Описанная выше реализация алгоритма поиска файлов применёна в реализации копирования и удаления директорий. При реализации рассматриваемых процессов понадобится наличие двух временных списков: списка директорий и списка файлов (каждая строка обоих списков включает в себя “полный путь” (FULL PATH)) файла/директории. Для реализации временных списков использован визуальная компонента ListBoх, данная компонента представляет собой динамический список строк и набор процедур и функций для управления этим списком. Заполнение этих списков осуществляется при помощи просмотра директории. С листингом программы реализующем эти процессы вы можете ознакомиться в приложении 1 на страницах (17,23-27). Для копирования/удаления директорий составляются оба вышеупомянутых списка. При вставке директории создаётся полное дерево директории, а затем происходит копирование файлов. При удалении директории так же составляются оба списка, но так как стандартной процедуры удаляющей не пустую директорию нет, то в начале удаляются все файлы в удаляемой директории (включая файлы находящиеся в поддиректориях), а затем пустые директории.

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

Программа имеет все необходимые функции работы с файлами. Все функции можно активизировать нажатием комбинации клавиш. Производиться статистика копирования, переноса, удаления файлов/директорий в удобной для восприятия пользователем форме. Существует простой механизм наложения фильтра на показываемые файлы. При изменении интерфейса программы, все изменения сохраняются и будут восстановлены при следующем запуске. Запуск приложений со строкой параметров с указанием типа запуска. Вывод сообщения о количестве поддиректорий в директории и о количестве файлов расположенных в ней. Определение размера директории присвоение атрибутов группе файлов простым нажатием двух клавиш.

Выводы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Главная форма программы

Модуль описывающий главную форму

unit UMainForm; // главная форма программы

interface

// подключаемые модули (стандартные)

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 Menus, ExtCtrls, ComCtrls, StdCtrls, FileCtrl, Grids, Outline, DirOutln,

 ToolWin, Buttons;

type

 TMainForm = class(TForm)

 MainMenu1: TMainMenu;

 File1: TMenuItem;

 About1: TMenuItem;

 N1: TMenuItem;

 Exit1: TMenuItem;

 Options1: TMenuItem;

 Directory: TDirectoryOutline;

 FileList: TFileListBox;

 Drv: TDriveComboBox;

 StatusBar: TStatusBar;

 DirectoryMenu: TPopupMenu;

 FileMenu: TPopupMenu;

 Splitter: TSplitter;

 Cut: TMenuItem;

 Copy: TMenuItem;

 Paste: TMenuItem;

 Rename1: TMenuItem;

 Delete: TMenuItem;

 NewDir: TMenuItem;

 CopyDir: TMenuItem;

 RenameDir: TMenuItem;

 DeleteDir: TMenuItem;

 PasteDir: TMenuItem;

 TempDelete: TListBox;

 TempCopyMove: TListBox;

 Open: TMenuItem;

 View: TMenuItem;

 FileMask1: TMenuItem;

 CMDirList: TListBox;

 DFileList: TListBox;

 Find1: TMenuItem;

 Info1: TMenuItem;

 CMFileList: TListBox;

 FileAttr: TMenuItem;

 SizeDirectory1: TMenuItem;

 CutDir: TMenuItem;

 ToolBar1: TToolBar;

 DrBox: TDriveComboBox;

 Bevel1: TBevel;

 Bevel2: TBevel;

 SpeedButton1: TSpeedButton;

 SCut: TSpeedButton;

 Bevel3: TBevel;

 SCopy: TSpeedButton;

 SPaste: TSpeedButton;

 SDel: TSpeedButton;

 Up: TSpeedButton;

 Bevel4: TBevel;

 Cut1: TMenuItem;

 Copy1: TMenuItem;

 Paste1: TMenuItem;

 Rename: TMenuItem;

 Delete1: TMenuItem;

 Selectall: TMenuItem;

 InvertSelect: TMenuItem;

 procedure About1Click(Sender: TObject);

 procedure Exit1Click(Sender: TObject);

 procedure FormCreate(Sender: TObject);

 procedure Options1Click(Sender: TObject);

 procedure DrivesSectionClick(HeaderControl: THeaderControl;

 Section: THeaderSection);

 procedure DrivesMouseUp(Sender: TObject; Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer);

 procedure NewDirClick(Sender: TObject);

 procedure DirectoryChange(Sender: TObject);

 procedure CopyClick(Sender: TObject);

 procedure CutClick(Sender: TObject);

 procedure PasteClick(Sender: TObject);

 procedure Rename1Click(Sender: TObject);

 procedure DeleteDirClick(Sender: TObject);

 procedure DeleteClick(Sender: TObject);

 procedure FileMenuPopup(Sender: TObject);

 procedure FileMask1Click(Sender: TObject);

 procedure FileListDblClick(Sender: TObject);

 procedure SplitterMoved(Sender: TObject);

 procedure Find1Click(Sender: TObject);

 procedure Info1Click(Sender: TObject);

 procedure CopyDirClick(Sender: TObject);

 procedure RenameDirClick(Sender: TObject);

 procedure FileAttrClick(Sender: TObject);

 procedure ViewClick(Sender: TObject);

 procedure SizeDirectory1Click(Sender: TObject);

 procedure FileListMouseUp(Sender: TObject; Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer);

 procedure FileListKeyPress(Sender: TObject; var Key: Char);

 procedure FileListKeyDown(Sender: TObject; var Key: Word;

 Shift: TShiftState);

 procedure PasteDirClick(Sender: TObject);

 procedure DirectoryMenuPopup(Sender: TObject);

 procedure File1Click(Sender: TObject);

 procedure OpenClick(Sender: TObject);

 procedure DrBoxChange(Sender: TObject);

 procedure UpClick(Sender: TObject);

 procedure SCutClick(Sender: TObject);

 procedure SPasteClick(Sender: TObject);

 procedure SDelClick(Sender: TObject);

 procedure SCopyClick(Sender: TObject);

 procedure FileListClick(Sender: TObject);

 procedure CutDirClick(Sender: TObject);

 procedure Cut1Click(Sender: TObject);

 procedure Copy1Click(Sender: TObject);

 procedure Paste1Click(Sender: TObject);

 procedure Delete1Click(Sender: TObject);

 procedure RenameClick(Sender: TObject);

 procedure FormResize(Sender: TObject);

 procedure InvertSelectClick(Sender: TObject);

 procedure FileListKeyUp(Sender: TObject; var Key: Word;

 Shift: TShiftState);

 procedure SelectallClick(Sender: TObject);

 private

 public

 end;

var

 MainForm: TMainForm;

 Size:integer;

implementation

// подключаемые модули (не стандартные)

uses UAboutBox,UMainForm_, UOptionsForm, UCreateDir, UProgressForm,

 URenameForm, UAskDeleteForm, UGetFileMask, FmxUtils, UFindForm, UInfoForm,

 UAttrFilesForm,UNotTrivial, UDeleteDir, URenameDirForm, URunForm,

 UViewForm;

{$R *.DFM}

procedure TMainForm.About1Click(Sender: TObject);

// вывод формы "ИНФОРМАЦИЯ О ПРОГРАММЕ"

begin

 AboutBox.Show;

end;

procedure TMainForm.Exit1Click(Sender: TObject);

// Обработка выхода из программы

begin

 If AskExit then

 begin

 // Подтверждение выхода

 If Application.MessageBox('Exit ?','Exit',MB_APPLMODAL+MB_ICONQuestion+MB_YESNO)=IDYes then

Страницы: 1, 2, 3, 4, 5


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.