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

Разработка файловой оболочки Постановка задачи. Задача заключается в разработке файловой оболочки для операционной системы Windows 9598. В программе реализовать механизмы копирования, переноса, удаления, переименования файлов и директорий, поиск файлов по маске, просмотр списка файлов по маске, просмотр и редактирование файлов во внешних редакторах, присвоение и получение атрибутов файла, присвоение атрибутов группе файлов, запуск приложений со строкой параметров, создание директории, определение размера директории,
получение информации о диске, настройки интерфейса программы, определение суммарного объма дискового пространства занимаемого группой файлов, восстановление интерфейсных параметров при повторном запуске программы. Так же обеспечить управление оболочкой при помощи манипулятора типа мышь и клавиатуры. Метод реализации. Для реализации поставленной задачи необходимо создать интерфейс пользователя состоящий из таких компонент А список директорий. Б список файлов
В список дисков Г главное меню программы Д панель инструментов. Для организации интерфейса пользователя будут использованы стандартные визуальные компоненты Delphi 3.0. Для реализации механизма копированиявставки необходимо запомнить список копируемых файловдиректорий, каждый элемент списка должен содержать информацию о месте нахождения файладиректории и имени файладиректории. При копировании группы файлов или одного файла необходимо определить их место положение в иерархии
каталогов, а затем заполнить список, выбирая все файлы отмеченные пользователем из списка файлов показанного в интерфейсной части программы списке файлов. При копировании директории необходимо также определить е положение и произвести сканирование самой директории с сохранением в списке имн файлов содержащихся в копируемой директории и структуры каталогов. Для вставки директории в место копирования, необходимо воссоздать е структуру, а затем скопировать в не файлы. Для осуществления этого процесса вышеупомянутый список разбивается на два. В первом списке назовем его временный список директорий должна находиться структура каталогов, а во втором временном списке файлов расположенные в этих каталогах файлы. Два списка необходимы для уменьшения времени затраченного на копирование, так как при наличии одного списка необходим анализ каждого элемента списка на предмет наличия поддиректорий и создание этих поддиректорий
в месте копирования, а в копируемой директории в большинстве случаев количество директорий меньше чем количество файлов и времени на проверку понадобиться больше, чем при использовании двух списков. Если же использовать два списка то для воссоздания структуры каталогов необходимо лишь отсортировать временный список директорий в соответствии с иерархией каталогов, и создавать директории проходя по списку сверху вниз. Так как после сортировки, директории расположенные на верхних уровнях вложенности
каталогов будут находиться в верхней части списка, а директории расположенные на нижних уровнях будут находиться в конце списка. После воссоздания структуры директории остатся только переписать файлы. Алгоритм заполнения временных списков показан на рисунке 1 в виде блок схемы. Реализация данного алгоритма будет базирована на использовании функций FindFirst и FindNext, эти функции осуществляют просмотр содержимого указанной директории и в качестве
результата возвращают имя найденного элемента, его атрибуты, время создания и размер. При анализе атрибутов найденного элемента можно определить данный элемент директория или файл, и в соответствии с анализом записать его имя и положение в соответствующий список. На описанном алгоритме будет базирован также механизм удаления директории. Упомянутые выше функции FindFirst и FindNext будут также применены при реализации механизма поиска файлов по маске. Описание программы. Программа реализована на языке паскаль с использованием Delphi 3.0 – среды визуального программирования приложений для Windows 95 . Детально рассмотрим реализацию некоторых механизмов, таких как Поиск файлов Копирование Директорий Удаление директорий. Поиск файлов Поиск файлов в программе реализован с использованием маски.
В маске возможно использование служебного символа, замены группы неизвестных символов в имени файла, или его расширении , а также возможен поиск с различием регистров символов, и без такового, с указанием области поиска. Так же существуют возможности поиска с наложением дополнительных ограничений, таких как размер искомого файла, а так же времени создания файла. Детально с реализацией выше перечисленных механизмов вы можете ознакомиться в приложении 1 на страницах 29-35.
Здесь же, мы рассмотрим реализацию основной части этого механизма. Для поиска файлов по маске необходимо задание маски поиска в виде .сом или autoexec или другие возможные варианты, и области поиска. В качестве дополнительного параметра может быть задана проверка регистра символов. Блок схема поиска файлов показана на рисунке 1. При поиске используется рекурсивная процедура текст 1. в которой последовательно просматривается область
поиска, включая подкаталоги, сравнивается имя найденного файл с маской поиска, и если все наложенные ограничения выполнены, найденный файл заносится в список предлагаемый пользователю для просмотра. Для организации поиска в разных областях изменяется лишь место первого вызова рекурсивной процедуры. Текст 1. FindInCurrentDirCurDirstring Var SizeFinteger iinteger EndListboolean FTSearchRec Dstring begin Вывод в статус строке директории в которой производится поиск FindForm.StatusFind.Panels1.TextCurDir FindFirstCurDir faAnyFile,F FindNextF repeat Проверка расширенного поиска If FindForm.CBAdvSearch.Checked and F.Attr faDirectory then begin Проверка на размер найденного файла размер и время создания найденого файла должны находится в пределах
заданных пользователем if notF.Size StrToIntFindForm.SLess.Text and F.Size StrToIntFindForm.SGreater.Text then Continue if notFileDateTimeCurDirF.Name FindForm.DateIsBefore.Date and FileDateTimeCurDirF.Name FindForm.DateIsAfter.Date then Continue end проверить не является ли найденый файл директорией if
F.AttrfaDirectory then if F.Name . and F.Name then begin если найденный файл директория , рекурсивный вызов поиска в данной директории FindInCurrentDirCurDirF.Name end if F.Name and F.Name . then если файл подходит под маску, занести его в список if CompareFileWithMaskF.Name then begin FindForm.FileWasFind.Items.AddCurDirF.Na me FindForm.StatusFind.Panels0.TextIntToStr
StrToIntFindForm.StatusFind.Panels0.Text 1 FindForm.FileWasFind.Refresh end выполнять поиск пока не закончатся файлы в текущей области заданной области. UntilFindNextF 0 FindCloseF 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 classTForm 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 About1ClickSender TObject procedure Exit1ClickSender TObject procedure FormCreateSender TObject procedure Options1ClickSender TObject procedure DrivesSectionClickHeaderControl THeaderControl Section THeaderSection procedure DrivesMouseUpSender TObject Button TMouseButton Shift TShiftState X, Y Integer procedure NewDirClickSender TObject procedure DirectoryChangeSender TObject procedure CopyClickSender TObject procedure
CutClickSender TObject procedure PasteClickSender TObject procedure Rename1ClickSender TObject procedure DeleteDirClickSender TObject procedure DeleteClickSender TObject procedure FileMenuPopupSender TObject procedure FileMask1ClickSender TObject procedure FileListDblClickSender TObject procedure
SplitterMovedSender TObject procedure Find1ClickSender TObject procedure Info1ClickSender TObject procedure CopyDirClickSender TObject procedure RenameDirClickSender TObject procedure FileAttrClickSender TObject procedure ViewClickSender TObject procedure SizeDirectory1ClickSender
TObject procedure FileListMouseUpSender TObject Button TMouseButton Shift TShiftState X, Y Integer procedure FileListKeyPressSender TObject var Key Char procedure FileListKeyDownSender TObject var Key Word Shift TShiftState procedure PasteDirClickSender TObject procedure DirectoryMenuPopupSender
TObject procedure File1ClickSender TObject procedure OpenClickSender TObject procedure DrBoxChangeSender TObject procedure UpClickSender TObject procedure SCutClickSender TObject procedure SPasteClickSender TObject procedure SDelClickSender TObject procedure SCopyClickSender
TObject procedure FileListClickSender TObject procedure CutDirClickSender TObject procedure Cut1ClickSender TObject procedure Copy1ClickSender TObject procedure Paste1ClickSender TObject procedure Delete1ClickSender TObject procedure RenameClickSender TObject procedure FormResizeSender TObject procedure InvertSelectClickSender TObject procedure FileListKeyUpSender TObject var Key Word Shift TShiftState procedure SelectallClickSender TObject private public end var MainForm TMainForm Sizeinteger implementation подключаемые модули не стандартные uses UAboutBox,UMainForm, UOptionsForm,
UCreateDir, UProgressForm, URenameForm, UAskDeleteForm, UGetFileMask, FmxUtils, UFindForm, UInfoForm, UAttrFilesForm,UNotTrivial, UDeleteDir, URenameDirForm, URunForm, UViewForm R .DFM procedure TMainForm.About1ClickSender TObject вывод формы ИНФОРМАЦИЯ О ПРОГРАММЕ begin AboutBox.
Show end procedure TMainForm.Exit1ClickSender TObject Обработка выхода из программы begin If AskExit then begin Подтверждение выхода If Application.MessageBoxExit ,Exit,MBAPPLMODALMBICONQuestionMBYESNOID Yes then Begin запись информации о программе в файл МС.INI SaveIniMainForm Close end end else begin SaveIniMainForm
Close end end procedure TMainForm.FormCreateSender TObject Установка начльных параметров для компонент главной формы begin SetUpMainForm SetUpComponents end procedure TMainForm.Options1ClickSender TObject Вывод формы параметров begin Центрирование выводимой формы относительно главной формы
GetFormToCenterOptionsForm OptionsForm.ShowModal end procedure TMainForm.DrivesSectionClickHeaderContro l THeaderControl Section THeaderSection Смена текущего диска begin Directory.DriveSection.Text1 Directory.SetDirectorySection.Text1 MainForm.Directory.BuildTree end procedure TMainForm.
DrivesMouseUpSender TObject Button TMouseButton Shift TShiftState X, Y Integer begin перерисовка списка директорий при необходимости Directory.Repaint end procedure TMainForm.NewDirClickSender TObject Создание директории и вывод соответствующей формы begin CreateDirForm.Show end Function CountDirStrStringString Определение количества поддиректорий в текущей директории Var FTSearchRec Cinteger begin c0 findfirstStr faAnyFile,F findnextF repeat if f.Attr 16 and f.attr 32 and f.Name . and f.Name then cc1 Untilfindnextf 0 CountDirIntToStrc end procedure TMainForm.DirectoryChangeSender TObject Смена текущей директории begin
Обновление списка файлов FileList.SetDirectoryDirectory.Directory Заполнение статус-строки MainForm.StatusBar.Panels0.TextCountDirD irectory.Directory dir. IntToStrMainForm.FileList.Items.Count files MainForm.StatusBar.Panels1.Text Определение активных кнопок панели управления If UpperCaseMainForm.
Directory.DirectoryUpp erCaseMainForm.DrBox.Drive then begin Up.EnabledFalse SCut.EnabledFalse SCopy.EnabledFalse SDel.EnabledFalse end else begin Up.EnabledTrue SCut.EnabledTrue SCopy.EnabledTrue SDel.EnabledTrue end end procedure TMainForm.CopyClickSender TObject Копирование файлов begin
FlagCopyFileTrue FlagMoveFileFalse CopyPathFileInTemp end procedure TMainForm.CutClickSender TObject Вырезание файлов begin FlagMoveFileTrue CopyPathFileInTemp end procedure TMainForm.PasteClickSender TObject begin ProgressForm.Show PasteFileFromTemp ProgressForm.Close MainForm.TempCopyMove.Clear end procedure
TMainForm.Rename1ClickSender TObject Переименование файлов в соответствующей экранной форме begin GetFormToCenterRenameFileForm RenameFileForm.ShowModal end procedure TMainForm.DeleteDirClickSender TObject Удаление директории begin Обнуление временных списков MainForm.CMDirList.Clear MainForm.CMFileList.Clear DeleteEmptyDirectoryMainForm.
Directory.D irectory Обновление списка директорий MainForm.Directory.Invalidate end procedure TMainForm.DeleteClickSender TObject Удаление файлов begin AskDeleteForm.Show end procedure TMainForm.FileMenuPopupSender TObject Определение видимых строк в контектсном меню файловой области в момент его вызова begin if MainForm.FileList.SelCount0 then begin with MainForm.FileMenu do begin Delete.EnabledFalse Cut.EnabledFalse Copy.EnabledFalse Rename1.EnabledFalse end end else begin with MainForm.FileMenu do begin Delete.EnabledTrue Cut.EnabledTrue Copy.EnabledTrue Rename1.EnabledTrue end end if MainForm.TempCopyMove.Items.Count 0 then Paste.EnabledFalse else
Paste.EnabledTrue end procedure TMainForm.FileMask1ClickSender TObject Запрос маски файлов для списка файлов в дальнейшем СФ begin GetFileMask.Show end procedure TMainForm.FileListDblClickSender TObject Запуск программредактированиепросмотр во внешнем редакторе при двойном щелчке мышкой Var strstring begin StrFileList.FileName ExecuteFileStr
SWSHOW end procedure TMainForm.SplitterMovedSender TObject Перемещение разделителя СФ и Списка директорий В Дальнейшем СД begin Ограничение на положение разделителя Ширина СД не должна быть меньше Списка дисков В дальнейшем СПД if Splitter.Left DrBox.Width then begin Directory.
WidthDrBox.Width6 end Сохранение положения разделителя для следующего запуска программы McIni.WriteIntegerASWindow,Splitter,Main Form.Directory.Width Установка размеров панелей статус-строки MainForm.StatusBar.Panels0.WidthMainForm .Directory.Width end procedure TMainForm.Find1ClickSender TObject Поиск файлов begin
FindForm.Show end procedure TMainForm.Info1ClickSender TObject Вывод информации о текущем диске и директории begin GetFormToCenterInfoForm InfoForm.ShowModal end procedure TMainForm.CopyDirClickSender TObject Копирование директорий Выбран пункт меню копировать begin SourseDirMainForm.
Directory.Directory DoingWithDirTrue CopyMoveDirectory end procedure TMainForm.RenameDirClickSender TObject Переименование директории в соответствующей форме begin GetFormToCenterRenameDirForm RenameDirForm.ShowModal end procedure TMainForm.FileAttrClickSender TObject Получение установка атрибутов файла в соотв. форме begin GetFormToCenterAttrFileForm AttrFileForm.ShowModal end procedure TMainForm.ViewClickSender TObject Определение видимых компонент в меню VIEW в момент его открытия begin if MainForm.FileList.SelCount 0 then begin MainForm.FileAttr.EnabledFalse end else begin MainForm.FileAttr.EnabledTrue end if UpperCaseMainForm.Directory.DirectoryUpp erCaseMainForm.DrBox.Drive then
MainForm.SizeDirectory1.EnabledFalse else MainForm.SizeDirectory1.EnabledTrue end Procedure DDDDirSstring Определение размера текущей директории Var dTSearchRec begin FindFirstDirS faAnyFile,D FindNextD repeat if D.Name . and D.Name then begin if D.AttrfaDirectory Or D.Attr18 then begin
DDDDirSD.Name end else begin SizeSizeD.Size end end UntilFindNextD 0 FindCloseD end procedure TMainForm.SizeDirectory1ClickSender TObject Вывод информации о текущей директории в статус-строке begin Size0 MainForm.StatusBar.Panels0.TextWait DDDMainForm.Directory.Directory MainForm.StatusBar.Panels0.TextFormatSiz eIntToStrSize перевод числа в читабельный
формат MainForm.StatusBar.Panels0.TextMainForm. StatusBar.Panels0.Text b end procedure TMainForm.FileListMouseUpSender TObject Button TMouseButton Shift TShiftState X, Y Integer Левая кнопка мышки отпущена Var iinteger FTSearchRec strstring begin str Size0 Если при помощи мышки выделена группа файлов определить их суммарный размер for i0 to
MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.Selectedi then begin FindFirstMainForm.FileList.Itemsi,faAnyF ile,F SizeSizeF.Size if MainForm.FileList.SelCount1 then break end end Если один выделенный файл, вывести информацию о нем в строке статуса if MainForm.FileList.SelCount1 then begin MainForm.StatusBar.
Panels1.TextExtractFi leNameF.Name FormatSizeIntToStrF.Size b DateToStrFileDateTimeF.Name TimeToStrFileDateTimeF.Name end else begin MainForm.StatusBar.Panels1.TextFormatSiz eintToStrSize b in IntToStrMainForm.FileList.SelCount selected files end end Procedure ReselectAllFile Инвертирование выделения файлов Var iinteger begin For i0 to MainForm.FileList.Items.Count-1 do MainForm.FileList.Selectedinot MainForm.FileList.Selectedi end Procedure SelectAllFKeyChar Выделить все файлы в СФ Var iinteger FTsearchRec Strstring begin if Key then begin if MainForm.FileList.SelCountMainForm.
FileL ist.Items.Count then ReselectAllFile else begin for i0 to MainForm.FileList.Items.Count-1 do MainForm.FileList.SelectediTrue str Size0 Обновление Статус-строки for i0 to MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.Selectedi then begin FindFirstMainForm.FileList.
Itemsi,faAnyF ile,F SizeSizeF.Size if MainForm.FileList.SelCount1 then break end end if MainForm.FileList.SelCount1 then begin MainForm.StatusBar.Panels1.TextExtractFi leNameF.Name FormatSizeIntToStrF.Size b DateToStrFileDateTimeF.Name TimeToStrFileDateTimeF.Name end else begin MainForm.
StatusBar.Panels1.TextFormatSiz eintToStrSize b in IntToStrMainForm.FileList.SelCount selected files end end end end procedure TMainForm.FileListKeyPressSender TObject var Key Char begin SelectAllFKey end procedure TMainForm.FileListKeyDownSender TObject var Key Word Shift TShiftState Нажата клавиша на клавиатуре
Var iinteger FTSearchRec strstring begin если нажат ENTER запустить файл if Key13 and not AskDeleteForm.Active then ExecuteFileFileList.FileName SWSHOW str Size0 for i0 to MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.Selectedi then begin FindFirstMainForm.
FileList.Itemsi,faAnyF ile,F SizeSizeF.Size if MainForm.FileList.SelCount1 then break end end Обновление статус строки if MainForm.FileList.SelCount1 then begin MainForm.StatusBar.Panels1.TextExtractFi leNameF.Name FormatSizeIntToStrF.Size b DateToStrFileDateTimeF.Name TimeToStrFileDateTimeF.Name end else begin MainForm.StatusBar.Panels1.TextFormatSiz eintToStrSize b in IntToStrMainForm.FileList.SelCount selected files end end procedure TMainForm.PasteDirClickSender TObject Вставка директории begin DestinationDirMainForm.Directory.Directo ry PasteDirectorySourseDir,MainForm.Directo ry.Directory MainForm.Directory.BuildTree
Если директория переноситься то удалить источник If not DoingWithDir then begin DelNotEmptyDirectorySourseDir MainForm.Directory.BuildTree end MainForm.CMDirList.Clear end procedure TMainForm.DirectoryMenuPopupSender TObject Определение видимых компонент контектсного меню
СД begin if MainForm.CMDirList.Items.Count0 then PasteDir.EnabledFalse else PasteDir.EnabledTrue If LengthMainForm.Directory.Directory 3 then begin CopyDir.EnabledFalse CutDir.EnabledFalse DeleteDir.EnabledFalse RenameDir.EnabledFalse end else begin CutDir.EnabledTrue CopyDir.
EnabledTrue DeleteDir.EnabledTrue RenameDir.EnabledTrue end end procedure TMainForm.File1ClickSender TObject Определение является ли выделенный файл приложением и подсвечивание скрытие пункта меню RUN в момент открытия меню FILE begin if UpperCaseExtractFileExtMainForm.FileList .FileName.EXE or UpperCaseExtractFileExtMainForm.FileList .FileName.
COM then Open.EnabledTrue else Open.EnabledFalse end procedure TMainForm.OpenClickSender TObject Запуск приложения со строкой параметров begin GetFormToCenterRunForm RunForm.ShowModal end procedure TMainForm.DrBoxChangeSender TObject Смена текущего диска и обносление СФ и СД Var FTSearchRec sstring begin MainForm.Directory.
DriveMainForm.DrBox.D rive MainForm.FileList.DirectoryMainForm.DrBo x.Drive SMainForm.FileList.Mask MainForm.FileList.Mask . FindFirstMainForm.DrBox.Drive faDirectory,F Repeat Until FindNextF 0 or F.AttrfaDirectory and F.Name . or F.Name if F.Attr faDirectory then MainForm.Directory.SetDirectoryMainForm. DrBox.Drive else MainForm.Directory.SetDirectoryMainForm. DrBox.DriveF.Name MainForm.Directory.BuildTree MainForm.Directory.SetDirectoryMainForm. DrBox.Drive MainForm.FileList.EnabledTrue MainForm.FileList.Masks MainForm.StatusBar.Panels0.TextIntToStrM ainForm.
FileList.Items.Count files end procedure TMainForm.UpClickSender TObject Перход на один уровень вверх в списке директорий Var iinteger Strstring begin strMainForm.Directory.Directory for iLengthStr downto 0 do if Stri then begin stri10 break end MainForm.Directory.Directorystr MainForm.Directory.
BuildTree end procedure TMainForm.SCutClickSender TObject Нажата кнопка ВЫРЕЗАТЬ на панели инструментов begin Если активен СФ то выреззать файлы if MainForm.FileList.Focused then begin FlagMoveFileTrue CopyPathFileInTemp end Если активен СД то вырезать директорию If MainForm.
Directory.Focused then begin SourseDirMainForm.Directory.Directory DoingWithDirFalse MainForm.CMDirList.Items.AddMainForm.Dir ectory.Directory GreateCopyMoveDirListMainForm.Directory. Directory end end procedure TMainForm.SPasteClickSender TObject На панели инструментов нажата кнопка ВСТАВИТЬ begin
Определить по заполнению временных списков что необходимо вставить файлы или директории if MainForm.TempCopyMove.Items.Count 0 then begin ProgressForm.Show PasteFileFromTemp ProgressForm.Close end If MainForm.CMDIrList.Items.Count 0 then begin DestinationDirMainForm.Directory.Directo ry PasteDirectorySourseDir,MainForm.
Directo ry.Directory MainForm.Directory.BuildTree If not DoingWithDir then begin DelNotEmptyDirectorySourseDir MainForm.Directory.BuildTree end MainForm.CMDirList.Clear end end procedure TMainForm.SDelClickSender TObject на панели нажата кнопка УДАЛИТЬ begin if MainForm.FileList.Focused and MainForm.FileList.SelCount 0 then begin AskDeleteForm.ShowModal end if MainForm.Directory.Focused then begin IndexDeleteDirectoryMainForm.Directory.S electedItem MainForm.CMDirList.Clear MainForm.CMFileList.Clear DeleteEmptyDirectoryMainForm.Directory.D irectory MainForm.Directory.Invalidate end end procedure
TMainForm.SCopyClickSender TObject На панели нажата кнопка КОПИРОВАТЬ begin If MainForm.Directory.Focused then begin SourseDirMainForm.Directory.Directory DoingWithDirTrue CopyMoveDirectory end If MainForm.FileList.Focused then begin FlagCopyFileTrue FlagMoveFileFalse CopyPathFileInTemp end end procedure
TMainForm.FileListClickSender TObject begin MainForm.SDel.EnabledTrue MainForm.SCopy.EnabledTrue MainForm.SCut.EnabledTrue end procedure TMainForm.CutDirClickSender TObject Вырезание Директории begin SourseDirMainForm.Directory.Directory DoingWithDirFalse MainForm.CMDirList.
Items.AddMainForm.Dir ectory.Directory GreateCopyMoveDirListMainForm.Directory. Directory end procedure TMainForm.Cut1ClickSender TObject Вырезание в зависимости от контекста begin if MainForm.FileList.Focused then begin FlagMoveFileTrue CopyPathFileInTemp end If MainForm.Directory.Focused then begin
SourseDirMainForm.Directory.Directory DoingWithDirFalse MainForm.CMDirList.Items.AddMainForm.Dir ectory.Directory GreateCopyMoveDirListMainForm.Directory. Directory end end procedure TMainForm.Copy1ClickSender TObject Копирование в зависимости от контекста begin If MainForm.Directory.Focused then begin SourseDirMainForm.
Directory.Directory DoingWithDirTrue CopyMoveDirectory end If MainForm.FileList.Focused then begin FlagCopyFileTrue FlagMoveFileFalse CopyPathFileInTemp end end procedure TMainForm.Paste1ClickSender TObject Вставка в зависимости от контекста begin if MainForm.TempCopyMove.Items.Count 0 then begin ProgressForm.Show PasteFileFromTemp ProgressForm.Close end If MainForm.CMDIrList.Items.Count 0 then begin DestinationDirMainForm.Directory.Directo ry PasteDirectorySourseDir,MainForm.Directo ry.Directory MainForm.Directory.BuildTree If not DoingWithDir then begin DelNotEmptyDirectorySourseDir
MainForm.Directory.BuildTree end MainForm.CMDirList.Clear end end procedure TMainForm.Delete1ClickSender TObject Удаление в зависимости от контекста begin if MainForm.FileList.Focused and MainForm.FileList.SelCount 0 then begin AskDeleteForm.Show end if MainForm.Directory.Focused then begin
IndexDeleteDirectoryMainForm.Directory.S electedItem MainForm.CMDirList.Clear MainForm.CMFileList.Clear DeleteEmptyDirectoryMainForm.Directory.D irectory MainForm.Directory.Invalidate end end procedure TMainForm.RenameClickSender TObject Переименование в зависимости от контекста begin
If MainForm.Directory.Focused then begin GetFormToCenterRenameDirForm RenameDirForm.ShowModal end if MainForm.FileList.Focused then begin RenameFileForm.ShowModal end end procedure TMainForm.FormResizeSender TObject Наложение ограничений на минимальные размеры главной формы begin if MainForm.Width 391 then MainForm.Width391 if MainForm.
Height 260 then MainForm.Height260 end procedure MainForm.InvertSelectClickSender TObject begin ReselectAllFile end procedure TMainForm.FileListKeyUpSender TObject var Key Word Shift TShiftState Клавиша отпущена при работе с СФ Var iinteger FTSearchRec strstring begin Обновление статус-строки str
Size0 for i0 to MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.Selectedi then begin FindFirstMainForm.FileList.Itemsi,faAnyF ile,F SizeSizeF.Size if MainForm.FileList.SelCount1 then break end end if MainForm.FileList.SelCount1 then begin MainForm.StatusBar.Panels1.TextExtractFi leNameF.Name FormatSizeIntToStrF.Size b DateToStrFileDateTimeF.Name TimeToStrFileDateTimeF.Name end else begin MainForm.StatusBar.Panels1.TextFormatSiz eintToStrSize b in IntToStrMainForm.FileList.SelCount selected files end end procedure TMainForm.SelectallClickSender TObject begin SelectAllF end end.
Вспомогательные модули unit UMainForm Вспомогательный модуль программы interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus,IniFiles,ExtCtrls, ComCtrls, StdCtrls, FileCtrl, Grids, Outline, DirOutln, ToolWin, Buttons Const FL11 column FL22 column FL33 column
Var AskExitboolean MCIniTIniFile FlagCopyFileBoolean FlagMoveFileBoolean Function FloatToIntxrealinteger Procedure SaveIniMainForm Procedure ReadIniMainForm Procedure SetUpMainForm Procedure GetFormToCenterFormTForm Function FormatSizeSStringString Procedure UpdateMC
Procedure WriteIniOptions Procedure ReadIniOptions Procedure SetUpComponents Var ColDeleteFiles,ColFilesInTempCopyMoveint eger AllDeleteFlag,DeleteFlagboolean ResultFDCFFlaginteger FDelboolean Procedure CopyPathFileInTemp Function CreateStringForTempiintegerstring Procedure PasteFileFromTemp Function GetSizeAllFilesListTListBoxInteger
Procedure DeleteEmptyDirectoryDirstring Procedure CheckForOverwriteStrstringxinteger Var Ddirstring DoingWithDirboolean DirSoursestring Procedure GreateCopyMoveDirListDirSstring Procedure CopyMoveDirectory implementation Uses UMainForm, UOptionsForm, FMXUtils, UAskDeleteForm, UAskDeleteCurrentFile, UDeleteDir
Procedure CopyMoveDirectory Копирование перенос директорий begin MainForm.CMDirList.Clear MainForm.CMFileList.Clear MainForm.CMDirList.Items.AddMainForm.Dir ectory.Directory Создание временных списков GreateCopyMoveDirListMainForm.Directory. Directory end Procedure GreateCopyMoveDirListDirSstring Рекурсивная процедура создания списков для копированияпереносаудаления директории Var DTSearchRec begin FindFirstDirS faAnyFile,D FindNextD repeat if D.Name . and D.Name then begin if D.AttrfaDirectory Or D.Attr18 then begin MainForm.CMDirList.Items.AddDirSD.Name GreateCopyMoveDirListDirSD.Name end else begin
MainForm.CMFileList.Items.AddDirSD.Name end end UntilFindNextD 0 FindCloseD end Procedure CheckForOverwriteStrstringxinteger Проверка существования файлов и перезапись его по желанию пользователя при вставке Var iinteger FilePastestring FileinDirstring MStrPChar begin FilePasteExtractFileNameStr for i0 to ColAllFiles-1 do begin
StrMainForm.FileList.Itemsi FileInDirStr if FilePasteFileInDir then begin StrOverWrite MainForm.TempCopyMove.Itemsx MstrPCharStr Найден файл , запрос на его перезапись if Application.MessageBoxMStr,Warning,1 1 then begin MainForm.TempCopyMove.ItemsxMainForm.Tem pCopyMove.Itemsx.Deletex ColFilesInTempCopyMoveColFilesInTempCopy
Move-2 end end end end Procedure DeleteEmptyDirectoryDirString Удаление пустой директории Var iinteger begin I- iMainForm.Directory.SelectedItem MainForm.Directory.DirectoryMainForm.Dir ectory.Drive RmDirDir if IOResult 0 then begin GetFormToCenterFDeleteDir FDeleteDir.LDir.CaptionDir
FDeleteDir.ShowModal if Fdel then begin MainForm.Directory.Deletei RmDirDir end Else begin MainForm.Directory.SetDirectoryDir MainForm.Directory.BuildTree end end Else MainForm.Directory.Deletei I MainForm.Directory.Update MainForm.CMDirList.Items.Clear MainForm.CMFileList.
Items.Clear end Function GetSizeAllFilesListTListBoxInteger Определение размера всех файлов для прогресс формы Var iinteger Sizeinteger begin Size0 For i0 to List.Items.Count-1 do begin SizeSizeGetFileSizeList.Itemsi end GetSizeAllFilesSize end Procedure PasteFileFromTemp Вставка файлов Var StrPastestring Strstring iinteger begin Формирование параметров для вставки файлов If MainForm.Directory.DirectoryLengthMainFo rm.Directory.Directory then begin StrPasteMainForm.Directory.Directory end else begin StrPasteMainForm.Directory.Directory end Проверка всего списка вставляемых файлов на перезапись
For i0 to MainForm.TempCopyMove.Items.Count-1 do CheckForOverwriteMainForm.TempCopyMove.I temsi,i For i0 to MainForm.TempCopyMove.Items.Count-1 do begin StrMainForm.TempCopyMove.Itemsi Определение действия над файлами копировать или перемещать If FlagMoveFile then begin if StrLengthstr then MoveFileMainForm.
TempCopyMove.Itemsi,Str Paste end else begin if StrLengthstr then CopyFileMainForm.TempCopyMove.Itemsi,Str Paste end If StrLengthstr then begin StrLengthstr0 MainForm.TempCopyMove.ItemsiStr end end MainForm.FileList.Update If FlagMoveFile then begin FlagMoveFileFalse MainForm.TempCopyMove.Clear end end
Function CreateStringForTempiintegerstring Создание строки для временного списка Var Strstring begin StrMainForm.Directory.Directory If StrLengthStr then begin StrStr end StrStrMainForm.FileList.Itemsi CreateStringForTempStr end Procedure CopyPathFileInTemp Создание временного списка файлов
Var iinteger begin ColFilesInTempCopyMove0 MainForm.TempCopyMove.Clear for i0 to ColAllFiles-1 do begin if MainForm.FileList.Selectedi then begin ColFilesInTempCopyMoveColFilesInTempCopy Move1 If FlagMoveFile then begin MainForm.TempCopyMove.Items.AddCreateStr ingForTempi MainForm.FileList.Itemsi end else begin
MainForm.TempCopyMove.Items.AddCreateStr ingForTempi end end end end Procedure SetUpComponents begin MainForm.StatusBar.Panels0.WidthMainForm .Directory.Width end Procedure ReadIniOptions Чтение параметров из ини файла var tmpintegerinteger begin with OptionsForm do begin AskOnExit.CheckedMCIni.ReadBoolOptions,A skOnExit,True CStatusBar.CheckedMCIni.ReadBoolOptions, StatusBar,True tmpintegerMCIni.ReadIntegerOptions,FileL istColumns,1 Case tmpinteger of 1 LFileList.CaptionFL1 2 LFileList.CaptionFL2 3 LFileList.CaptionFL3 end Case end end Procedure WriteIniOptions Запись параметров в ини файл begin with
MCIni do begin WriteBoolOptions,AskOnExit,OptionsForm.A skOnExit.Checked WriteBoolOptions,StatusBar,OptionsForm.C StatusBar.Checked Case MainForm.FileList.Columns of 1 WriteIntegerOptions,FileListColumns,1 2 WriteIntegerOptions,FileListColumns,2 3 WriteIntegerOptions,FileListColumns,3 end case end end
Procedure UpdateMC Обновление интерфейсных параметров программы begin if OptionsForm.AskOnExit.Checked then AskExitTrue else AskExitFalse If OptionsForm.CStatusBar.Checked then MainForm.StatusBar.VisibleTrue else MainForm.StatusBar.VisibleFalse if OptionsForm.LFilelist.CaptionFL1 then begin
MainForm.FileList.Columns1 MainForm.FileList.Update end if OptionsForm.LFilelist.CaptionFL2 then begin MainForm.FileList.Columns2 MainForm.FileList.Update end if OptionsForm.LFilelist.CaptionFL3 then begin MainForm.FileList.Columns3 MainForm.FileList.Update end end Procedure SetUpMainForm begin
Подключение файла параметров MCIniTIniFile.CreateMC.Ini ReadIniMainForm end Procedure ReadIniMainForm begin with MainForm do begin TopMCIni.ReadIntegerASWindow,Top,100 LeftMCIni.ReadIntegerASWindow,Left,100 HeightMCIni.ReadIntegerASWindow,Height,1 00 WidthMCIni.ReadIntegerASWindow,
Width,100 Directory.WidthMcIni.ReadIntegerASWindow ,Splitter,100 end end Procedure SaveIniMainForm begin if MainForm.Top -4 then begin MCIni.WriteIntegerASWindow,Top,MainForm. Top MCIni.WriteIntegerASWindow,Left,MainForm .Left MCIni.WriteIntegerASWindow,Width,MainFor m.Width MCIni.WriteIntegerASWindow,Height,MainFo rm.Height end end Function FloatToIntxrealinteger begin FloatToIntStrToIntFloatToStrIntX end Procedure GetFormToCenterFormTForm begin Form.TopFloatToIntMainForm.TopMainForm.H eight2-Form.Height2 Form.LeftFloatToIntMainForm.LeftMainForm .Width2-Form.Width2 end Function FormatSizeSStringString перевод целого числа в читабельный
формат для размеров файлов директорий Var i,j,ninteger Tmp,TempString begin Tmp for iLengthS downto 1 do tmptmpSi n0 for i1 to Lengthtmp do begin if n3 then begin n0 TempTemp, end TempTempTmpi nn1 end Tmp for iLengthTemp downto 1 do TmpTmpTempi FormatSizeTmp end end. unit UNotTrivial
Вспамагательный модуль программы interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons Var IndexDelDirinteger CurDeleteDirstring Yes,No,Allboolean SourseDirString DestinationDirString IndexDeleteDirectoryinteger Procedure
DelOneFiledFilestringFlagboolean Procedure DelNotEmptyDirectoryDirString Procedure PasteDirectorySDir,DDirstring Procedure CreateDirInDestinS,Dstring Procedure SortCMDirList implementation Uses UMainForm, UMainForm, UDeleteDir, DirOutLn, UAskDeleteCurrentFile, FMXUtils,UProgressForm Procedure DelNotEmptyDirectoryDirstring
Удаление не пустой директории Var iinteger Maxinteger EndForinteger begin Создание временных списков GreateCopyMoveDirListdir Удаление файлов из всех поддиректорий For i0 to MainForm.CMFileList.Items.Count-1 do begin DelOneFileMainForm.CMFileList.Itemsi,Tru e FDeleteDir.Label1.VisibleFalse
FDeleteDir.LDir.CaptionFile MainForm.CMFileList.Itemsi is now deleting FdeleteDir.Update end Сортировка временного списка директорий по возврастанию SortCMDirList Удаление уже пустых директорий For iMainForm.CMDirList.Items.Count-1 downto 0 do begin I- RmDirMainForm.CMDirList.Itemsi FDeleteDir.LDir.CaptionDirectory MainForm.CMDirList.Itemsi is now deleting FDeleteDir.Label1.VisibleFalse FdeleteDir.Update if IOResult 0 then begin MainForm.CMDirList.Items.Clear MainForm.CMFileList.Items.Clear Exit end MainForm.CMDirList.Items.Deletei end end Function DesideSlashstrstringinteger Подсчт количества для сортировки
Var D,rinteger begin d0 for r0 to Lengthstr do if strr then dd1 DesideSlashD end Procedure SortCMDirList Пузырьковая сортировка списка директорий Var iinteger Strl,StrHstring FlagBoolean begin FlagFalse if MainForm.CMDirList.Items.Count0 then Flagtrue If MainForm.CMDirList.Items.Count 1 then repeat For i0 to MainForm.
CMDirList.Items.Count-2 do begin strlMainForm.CMDirList.Itemsi StrHMainForm.CMDirList.Itemsi1 if DesideSlashStrL DesideSlashStrH then begin MainForm.CMDirList.ItemsiStrH MainForm.CMDirList.Itemsi1StrL end end For i0 to MainForm.CMDirList.Items.Count-2 do begin if DesideSlashMainForm.
CMDirList.Itemsi DesideSlashMainForm.CMDirList.Itemsi1 then begin FlagTrue end else begin FlagFalse Break end end Until Flag end Procedure CreateOneDirInDesd,s,strstring Var i,Pointinteger begin For i0 to Lengthstr do if stri si or stri then begin if Stri and Stri1Si1 then Pointi else break end if DLengthD then
PointPoint1 For iPoint to Lengthstr do ddstri if not CreateDirD then begin end else begin MainForm.Directory.SetDirectoryD MainForm.Directory.BuildTree end end Procedure CreateDirInDestinS,Dstring Создание дерева директорий при копировании переносе Var P,i,jintegerstr,str1string EndForinteger begin
MainForm.StatusBar.Panels1.TextBuild destination Tree, Please Wait SortCMDirList For i0 to MainForm.CMDirList.Items.Count-1 do begin strMainForm.CMDirList.Itemsi CreateOneDirInDesD,S,str end end Function CheskSizeInDestinationboolean Проверка доступного места на диске Var iinteger Sizeinteger begin For i0 to MainForm.CMFileList.Items.Count-1 do sizesizeGetFileSizeMainForm.CMFileList.I temsi if DiskFree0 size then CheskSizeInDestinationFalse else CheskSizeInDestinationTrue end Function CreateDestinPathForFileS,D,fstringstring Var Point,iinteger begin For i0 to Lengths do if Si then Pointi if DLengthd then PointPoint1
For iPoint to Lengthf do ddfi For iLengthd downTo 0 do if Di then begin Di10 Break end CreateDestinPathForFiled end Procedure PasteFileInDestS,Dstring Вставка файлов при копир. перен. директории Var iinteger Strstring FString begin MainForm.Directory.Repaint GetFormToCenterProgressForm ProgressForm.Show
SizeAllCopyGetSizeAllFilesMainForm.CMFil eList While MainForm.CMFileList.Items.Count 0 do begin StrCreateDestinPathForFileS,D,MainForm.C MFileList.Items0 CopyFileMainForm.CMFileList.Items0,Str If not DoingWithDir then DelOneFileMainForm.CMFileList.Items0,Fal se MainForm.CMFileList.Items.
Delete0 end ProgressForm.Close MainForm.FileList.Update end Procedure PasteDirectorySDir,DDirstring Вставка директории Var iinteger begin if CheskSizeInDestination then begin CreateDirInDestinSDir,DDir PasteFileInDestSdir,DDir if not DoingWithDir then begin end end else begin if DoingWithDir then begin
Application.MessageBoxNot Free Spase,Error,MBAPPLMODALMBOK end else begin end end end Procedure DelOneFiledFilestringFlagboolean Удаление одного файла Var FTSearchRec begin if flag then begin FileSetAttrdFile,faArchive DeleteFiledFile end else begin FindFirstdFile,faAnyFile,F if F.Attr32 or F.Attr0 then DeleteFiledFile else begin
AskDeleteCurrentFile.FileName.CaptionF.N ame AskDeleteCurrentFile.FileName.CaptionAsk DeleteCurrentFile.FileName.Caption is Read Only AskDeleteCurrentFile.ShowModal if not No Then begin FileSetAttrdFile,faArchive DeleteFiledFile end end end FindClosef end end. Форма поиска файлов по маске unit UFindForm Форма поиска файлов interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Tabnotbk, StdCtrls, Buttons, Menus, ExtCtrls type TFindForm classTForm FileWasFind TListBox StatusFind TStatusBar Table TTabbedNotebook BitBtn1
TBitBtn CBFindMask TComboBox Label1 TLabel GroupBox1 TGroupBox RBCurDir TRadioButton RBCurDrive TRadioButton RBAllDrives TRadioButton GroupBox2 TGroupBox LCurDir TLabel ExitSearch TButton Label2 TLabel Label3 TLabel DateIsAfter TDateTimePicker DateIsBefore TDateTimePicker
Label4 TLabel Label5 TLabel SGreater TEdit SLess TEdit CBAdvSearch TCheckBox Menu TPopupMenu Run1 TMenuItem GoTo1 TMenuItem CBCase TCheckBox B2 TBitBtn B1 TButton Timer1 TTimer procedure FormActivateSender TObject procedure BitBtn1ClickSender TObject procedure CBFindMaskDropDownSender
TObject procedure RBCurDirClickSender TObject procedure RBCurDriveClickSender TObject procedure RBAllDrivesClickSender TObject procedure ExitSearchClickSender TObject procedure CBAdvSearchClickSender TObject procedure MenuPopupSender TObject procedure Run1ClickSender TObject procedure
GoTo1ClickSender TObject procedure B2ClickSender TObject procedure B1ClickSender TObject procedure Timer1TimerSender TObject procedure FormCloseSender TObject var Action TCloseAction private public Procedure FindInCurrentDirCurDirstring end Type PRec TRec TRec record NameTSearchRec SubDirstring NextPRec end var
FindForm TFindForm FileMaskToFindarray1 10 of string EndFindFlagboolean Procedure ZdvigMasksstring Procedure InitFileMask Procedure WhereFind Procedure FindFile Procedure FindInAllDr function CompareFileWithMaskFileNamestringboolean implementation uses UMainForm,FmxUtils R .DFM function CompareFileWithMaskFileNamestringboolean Сравнение имени и расширения очередного файла с маской Var MaskN,Mask,MaskR,FN,FRstring EndFor,i,jinteger tmp,Rboolean begin FN MaskFindForm.CBFindMask.Text if not FindForm.CBCase.Checked then begin MaskUpperCaseMask FileNameUpperCaseFileName end FRExtractFileExtFileName
For i1 to LengthFileName do if FileNamei . then FNFNFileNamei else break For i1 to LengthMask do if Maski . then MaskNMaskNMaski else break MaskRExtractFileExtMask начало мучений с расширением if LengthMaskR LengthFR then EndForLengthMaskR else EndForLengthFR if MaskR2 and FR then begin jLengthMaskR for iLengthFR downTo
LengthFr-EndFor do begin if MaskRjFRi and MaskRj then begin jj-1 RTrue end Else if MaskRj and RTrue then begin break end else begin RFalse Break end end end If MaskRLengthMaskR then begin j1 for i1 to EndFor do begin if MaskRjFRi and MaskRj then begin jj1 RTrue end else begin if MaskRj and RTrue then begin break end else begin
RFalse Break end end end end for i0 to LengthMaskR do if MaskRi then tmpTrue else begin tmpFalse break end if tmp then if LengthMaskRLengthFR then begin for i0 to LengthFR do if MaskRiFRi then RTrue else begin RFalse break end end else begin RFalse end вроде конец с мучениями по расширению начало мучений с именем if
R then begin if LengthMaskN LengthFN then EndForLengthMaskN else EndForLengthFN if MaskN1 then begin jLengthMaskN for iLengthFN downto LengthFN-EndFor do begin if MaskNjFNi and MaskNj then begin jj-1 RTrue end else begin if MaskNjandRTrue then begin break end else begin rfalse break end end end end if MaskNLengthMaskN then begin j0 for i0 to EndFor do begin if
MaskNjFNi and MaskNj then begin jj1 rTrue end else begin if MaskNjandRTrue then break else begin RFalse break end end end end for i0 to LengthMaskN do if MaskNi then tmpTrue else begin tmpFalse break end if tmp then if LengthMaskN LengthFN then rFalse else begin for i0 to LengthMaskN do if MaskNiFNi then rTrue else begin rFalse break end end end CompareFileWithMaskR end Procedure FindFile Поиск файла Var Dirstring SubDirstring DrChar begin Поиск в текущей директории If FindForm.RBCurDir.Checked then begin DirFindForm.LCurDir.Caption if DirLengthDir then DirDir FindForm.FindInCurrentDirDir end Поиск на текущем диске If FindForm.
RBCurDrive.Checked then begin DirFindForm.LCurDir.Caption if DirLengthDir then DirDir FindForm.FindInCurrentDirDir end Поиск на всех дисках If FindForm.RBAllDrives.Checked then begin FindInAllDr end end Procedure TFindForm.FindInCurrentDirCurDirstring Рекурсивная Процедура поиска в текущей директории и поддиректориях
Var SizeFinteger iinteger EndListboolean FTSearchRec Dstring KeyChar begin FindForm.StatusFind.Panels1.TextCurDir FindFirstCurDir faAnyFile,F FindNextF repeat вставить АSМовый код для прерывания по клавише ESC If FindForm.CBAdvSearch.Checked and F.Attr faDirectory then begin if notF.
Size StrToIntFindForm.SLess.Text and F.Size StrToIntFindForm.SGreater.Text then Continue if notFileDateTimeCurDirF.Name FindForm.DateIsBefore.Date and FileDateTimeCurDirF.Name FindForm.DateIsAfter.Date then Continue end if F.AttrfaDirectory then if F.Name . and F.Name then begin
FindInCurrentDirCurDirF.Name end if F.Name and F.Name . then if CompareFileWithMaskF.Name then begin FindForm.FileWasFind.Items.AddCurDirF.Na me FindForm.StatusFind.Panels0.TextIntToStr StrToIntFindForm.StatusFind.Panels0.Text 1 FindForm.FileWasFind.Refresh end UntilFindNextF 0 and KeyPressed
FindCloseF end Procedure FindInAllDr Поиск на всех дисках Var Dirstring iinteger begin for i1 to MainForm.DrBox.Items.Count-1 do begin dirMainForm.DrBox.Items.Stringsi dirUpperCasedir1 FindForm.FindInCurrentDirdir end end Procedure WhereFind Интерфейсная часть Var iinteger begin if FindForm.RBCurDir.Checked then begin FindForm.LCurDir.CaptionMainForm.Directo ry.Directory end if FindForm.RBCurDrive.Checked then begin FindForm.LCurDir.CaptionUpperCaseMainFor m.Directory.Drive end if FindForm.RBAllDrives.Checked then begin FindForm.LCurDir.Caption for i1 to MainForm.DrBox.Items.
Count-1 do begin FindForm.LCurDir.CaptionFindForm.LCurDir .CaptionUpperCaseMainForm.DrBox.Items.St ringsi1 end end end Procedure InitFileMask Проверка маски поиска для дальнейшего занесения в список масок Var iinteger tempStrstring begin tempStrFindForm.CBFindMask.Text FindForm.CBFindMask.Clear for i1 to 10 do begin if
FileMaskToFindi then FindForm.CBFindMask.Items.AddFileMaskToF indi end FindForm.CBFindMask.TexttempStr end Procedure ZdvigMasksstring Формирование списка масок поиска для хранения Var iinteger tmpboolean begin if FindForm.CBFindMask.Text . then begin for i10 downto 0 do if FindForm.CBFindMask.Itemsi FindForm.CBFindMask.Text then tmptrue else begin tmpFalse break end if tmp
then for i10 downto 2 do begin FileMaskToFindiFileMaskToFindi-1 end FileMaskToFind1s end end procedure TFindForm.FormActivateSender TObject Установка начальных значений для виз. компонент формы поиска begin Timer1.EnabledTrue InitFileMask DateIsBefore.DateDate DateIsAfter.DateDate CBFindMask.Text. CBCase.CheckedFalse
RBCUrDir.CheckedTrue LCurDir.CaptionMainForm.Directory.Direct ory SGreater.Text SLess.Text CBAdvSearch.CheckedFalse FileWasFind.Clear FindForm.StatusFind.Panels0.Text0 FindForm.ActiveControlCBFindMask end procedure TFindForm.BitBtn1ClickSender TObject Начать поиск файлов begin
ZdvigMaskCBFindMask.Text FindForm.FileWasFind.Clear FindForm.StatusFind.Panels0.Text0 FindForm.FileWasFind.SortedFalse FindForm.Refresh FindFile FindForm.FileWasFind.SortedTrue FindForm.FileWasFind.Refresh FindForm.StatusFind.Panels1.Text end procedure TFindForm.CBFindMaskDropDownSender TObject begin InitFileMask end procedure TFindForm.RBCurDirClickSender TObject begin WhereFind end procedure TFindForm.RBCurDriveClickSender TObject begin WhereFind end procedure TFindForm.RBAllDrivesClickSender TObject begin WhereFind end procedure TFindForm.ExitSearchClickSender TObject begin FindForm.
Close end procedure TFindForm.CBAdvSearchClickSender TObject begin if CBAdvSearch.Checked then begin Table.ActivePageAdvanced Search end end procedure TFindForm.MenuPopupSender TObject var iinteger begin for i0 to FindForm.FileWasFind.Items.Count-1 do If FindForm.FileWasFind.
Selectedi then begin FindForm.Run1.EnabledTrue FindForm.GoTo1.EnabledTrue Break end else begin FindForm.Run1.EnabledFalse FindForm.GoTo1.EnabledFalse end end procedure TFindForm.Run1ClickSender TObject Запуск файла из формы поиска Var iinteger begin For i0 to FindForm.FileWasFind.Items.
Count-1 do if FindForm.FileWasFind.Selectedi then begin ExecuteFileFindForm.FileWasFind.Itemsi SWSHOW break end FindForm.Close end Procedure GoToFile Преход в главную форму к месту расположения найденного файла Var i,jinteger Dir,FileNamestring begin for i0 to FindForm.FileWasFind.Items.Count-1 do begin if FindForm.FileWasFind.
Selectedi then begin FileNameExtractFileNameFindForm.FileWasF ind.Itemsi FindForm.Close DirFindForm.FileWasFind.Itemsi for jLengthDir downTo 0 do begin if Dirj then begin Dirj10 break end end MainForm.Directory.SetDriveDir1 MainForm.Directory.Expand1 MainForm.Directory.SetDirectoryDir
MainForm.Directory.BuildTree MainForm.FileList.Refresh for j0 to MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.ItemsjFileName then begin MainForm.FileList.SelectedjTrue MainForm.FileList.Refresh break end end break end end end procedure TFindForm.GoTo1ClickSender TObject begin GotoFile end procedure TFindForm.B2ClickSender TObject begin GotoFile end procedure TFindForm.B1ClickSender TObject begin Run1ClickSender end procedure TFindForm.Timer1TimerSender TObject begin if FileWasFind.SelCount 0 then begin B1.EnabledFalse B2.EnabledFalse end else begin B1.EnabledTrue B2.EnabledTrue end end procedure TFindForm.
FormCloseSender TObject var Action TCloseAction begin Timer1.EnabledFalse end end. Изменнный стандартный модульunit FmxUtils Изменнный стандартный модуль Внесйнные изменения отмечены interface uses SysUtils, Windows, Classes, Consts type EInvalidDest classEStreamError EFCantMove classEStreamError procedure CopyFileconst
FileName, DestName string procedure MoveFileconst FileName, DestName string function GetFileSizeconst FileName string LongInt function FileDateTimeconst FileName string TDateTime function HasAttrconst FileName string Attr Word Boolean function ExecuteFileconst FileName, Params,
DefaultDir string ShowCmd Integer THandle Var AllReadByteFileReal SizeAllCopyLongint implementation uses Forms, ShellAPI, UProgressForm, UMainForm, UNotTrivial,UMainForm const SInvalidDest Destination s does not exist SFCantMove Cannot move file s procedure CopyFileconst FileName,
DestName TFileName var FileSizeProgress,ReadByteFileReal CopyBuffer Pointer buffer for copying BytesCopied Longint Source, Dest Integer handles Destination TFileName holder for expanded destination name const ChunkSize Longint 8192 copy in 8K chunks begin Destination ExpandFileNameDestName expand the destination path if
HasAttrDestination, faDirectory then if destination is a directory Destination Destination ExtractFileNameFileName clone file name GetMemCopyBuffer, ChunkSize allocate the buffer try Source FileOpenFileName, fmShareDenyWrite open source file if Source 0 then raise EFOpenError.CreateFmtSFOpenError, FileName try Dest FileCreateDestination create output file overwrite existing if Dest 0 then raise EFCreateError.CreateFmtSFCreateError, Destination try Ведение статистики в форме прогресса копирования If MainForm.CMFileList.Items.Count0 then SizeAllCopyGetSizeAllFilesMainForm.TempC opyMove ProgressForm.ProgresCopy.Progress0 ProgressForm.
Total.CaptionFormatSizeIntT oStrSizeAllCopy FileSizeProgressGetFileSizeFileName ProgressForm.LFrom.CaptionFileName ProgressForm.LFileSize.CaptionFormatSize IntToStrGetFileSizeFileName ProgressForm.LTo.CaptionDestination ProgressForm.Update ReadByteFile0 repeat BytesCopied FileReadSource, CopyBuffer, ChunkSize read chunk if
ChunkSize GetFileSizeFileNamethen ReadByteFileReadByteFileGetFileSizeFileN ame else ReadByteFileReadByteFileChunkSize ProgressForm.LREadyWrite.CaptionFormatSi zeFloatToStrReadByteFile ProgressForm.Update ProgressForm.ProgresCopy.ProgressFloatTo Int100ReadByteFileFileSizeProgress1 End Paste if BytesCopied 0 then if we read anything
FileWriteDest, CopyBuffer, BytesCopied write chunk ProgressForm.ProgresCopy.Repaint ProgressForm.AllProgresCopy.Repaint until BytesCopied ChunkSize until we run out of chunks AllReadByteFileAllReadByteFileGetFileSiz eFileName ProgressForm.Ready.CaptionFormatSizeFloa tToStrAllReadByteFile
ProgressForm.AllProgresCopy.ProgressFloa tToInt100AllReadByteFileSizeAllCopy1 ProgressForm.ProgresCopy.Progress100 finally FileCloseDest close the destination file end finally FileCloseSource close the source file end finally FreeMemCopyBuffer, ChunkSize free the buffer end end MoveFile procedure Moves the file passed in FileName to the directory specified in
DestDir. Tries to just rename the file. If that fails, try to copy the file and delete the original. Raises an exception if the source file is read-only, and therefore cannot be deletedmoved. procedure MoveFileconst FileName, DestName string var Destination string begin Destination ExpandFileNameDestName expand the destination path if not RenameFileFileName, Destination then try just renaming begin CopyFileFileName, Destination copy it over to destination DelOneFileFileName,All end end GetFileSize function Returns the size of the named file without opening the file. If the file doesnt exist, returns -1. function GetFileSizeconst FileName string LongInt var SearchRec TSearchRec begin if
FindFirstExpandFileNameFileName, faAnyFile, SearchRec 0 then Result SearchRec.Size else Result -1 end function FileDateTimeconst FileName string System.TDateTime begin Result FileDateToDateTimeFileAgeFileName end function HasAttrconst FileName string Attr Word Boolean begin Result FileGetAttrFileName and Attr Attr end function
ExecuteFileconst FileName, Params, DefaultDir string ShowCmd Integer THandle var zFileName, zParams, zDir array0 79 of Char begin Result ShellExecuteApplication.MainForm.Handle, nil, StrPCopyzFileName, FileName, StrPCopyzParams, Params, StrPCopyzDir, DefaultDir, ShowCmd end end.
Краткое руководство пользователя. Программа предназначена для управления файловой системой операционной системы Windows 95 98, в программе предусмотрены следующие возможности Копирование, переименование, перенос, удаление файлов и директорий Определение и установка атрибутов файлов Расширенный поиск файлов по маске Запуск программ со строкой параметров Применение маски-фильтра при просмотре списка файлов
Создание директорий Определение размера директории Определение суммарного объма дискового пространства занимаемого группой файлов Получение информации о текущем диске Запуск внешних программ редакторов для просмотра и редактирования файлов Установка интерфейсных параметров программы. Обзор интерфейса программы МС. Интерфейс программы на четыре функциональные части Главное меню программы Панель инструментов Список файлов Список директорий Главное меню программы содержит с себе три компоненты управления программой File View Options Компонента File содержит в себе основные функции управления файлами и директориями см. рис. 1. Функция запуска программ Run доступна только тогда, когда выделенный файл является исполняемой программой. При выборе данного пункта. Появляется форма, содержащая строку параметров, а также параметр
запуска вид формы окна запуска см. рис. 2. Рис 1. Меню File. Рис 2. Форма запуска файлов со строкой параметров. Функции Cut, Copy, Paste, Delete Вырезать, Копировать, Вставить, Удалить стандартные функции управления файламидиректориями. При невозможности выполнения выше перечисленных действий, данные функции недоступны.
Функция Rename Переименовать запрашивает у пользователя новое имя для файла директории в форме показанной на рисунке 3. Рис 3. Переименование файлов директорий Функция Delete Удаления, удаляет выделенные элементы в зависимости от активной рабочей области. Если последнее, перед вызовом этой функции, выделение производилось в области файлов, то будут удалены выделенные файлы, если же активная область директорий то удалена будет директория.
Функция Find Найти обеспечивает расширенный поиск файлов по маске в области поиска указанной пользователем. Параметры и маска поиска задается в форме показанной на рисунке 4 Рис 4. Поиск файлов. Параметрами поиска являются задание области поиска, возможны три области текущая директория, текущий диск и все жесткие диски включая подключнные сетевые диски. Также есть возможность расширенного поиска с указанием ограничений в дате создания файла создания и его предполагаемых размерах. Во время поиска в строке статуса формы отражается количество найденных файлов, директория в которой осуществляется поиск. После того как были найдены файлы, возможен возврат в главную форму программы и переход к месту положения выбранного файла, а также запуск интересующего файла редактирование во внешнем редакторе, если выбранный файл не является приложением. Для удобства задания маски поиска предусмотрено хранение 10-и последних
масок в открывающемся списке. Функция Exit Выход производит выход из программы. Всем выше описанным функциям сопоставлены горячие клавиши. Компонента View содержит в себе функции фильтра, получения информации о диске, получение и установка атрибутов файла, получение размера текущей директории, выделения всех файлов находящихся в текущей директории и инверсное выделение файлов. Функция File Mask Маска фильтра запрашивает у пользователя в форме
Get File Mask маску для отображения файлов. Для отмены маски необходим повторный вызов функции и задание маски предлагаемой по умолчанию. Функция Info Информация предоставляет пользователю информацию о текущем диске объм свободного и занятого пространства, а также информацию о текущей директории. Функция File Attributes Атрибуты файла дает возможность просмотра текущих атрибутов файла и изменения этих атрибутов. В случае нескольких файлов возможно групповое присвоение новых атрибутов.
Функция Size Directory Размер директории выводит в статус строке списка директорий размер текущей директории. Функция Select All выделяет все файлы, находящиеся в данной директории. Функция Invert Select инвертирует выделение файлов. С файлов которые были выделены, выделение снимается, а остальные файлы выделяются. Компонента Options Параметры выводит на экран форму параметров программы см рис 5, в которой пользователь Рис 5. Параметры программы может установить параметры интерфейса программы. Параметры наличие статус строки, количество колонок в списке файлов от 1 до 3, запрашивать подтверждение при выходе из программы. Так же существует механизм установки значения параметров по умолчанию Запрашивать подтверждение при выходе, Наличие статус строки, 1 колонка в списке файлов. Панель инструментов содержит в себе некоторые из функций расположенных в
главном меню, а также кнопка перехода на один уровень вверх в списке директорий и список дисков включая сетевые диски подключенные операционной системой до запуска программы. Внешний вид панели инструментов показан на рисунке 6. Рис 6 Панель инструментов. Список Файлов, предназначен для просмотра списка файлов расположенных в текущей директории. При нажатии правой кнопки мыши вызывается контекстное меню, в котором имеются функции копирования,
удаления, переименования, вставки. Также у списка файлов существует статус-строка в которой выводится информация о отмеченном файле имя, размер, дату и время создания. В случае группы отмеченных файлов статус строка показывает какой суммарный объм байт занимают отмеченные файлы на диске. Список директорий, предназначен для просмотра директорий находящихся на текущем диске. Список имеет двевовидную структуру корнем которой являеться текущий диск.
При нажатии правой кнопки мыши появляться контектсное меню в котором перечислены функции работы с директориями. Использование функций Как упоминалось выше программа имеет набор функций работы с файлами. Некоторые требующие определнной последоваьтельности действий будут рассмотрены в данном разделе. Копирование Перенос. Для копирования файлов директории в дальнейшем будем говорить только о файлах, так как процессы идентичны необходимо выполнить следующую последовательность действий Выделить файлы которые необходимо скопировать Существуют несколько способов выделения группы файлов, те кто хорошо знаком в операционной системой Windows 95 этот раздел, как и все последующие могут пропустить выделение мышкой с применением клавиш Ctrl и Shift, клавиша Ctrl предназначена для выделения в группу файлов отдельно стоящих в списке, а клавиша Shift предназначена для выделения от начального файла, до конечного.
Выполнить функцию копировать посредством выбора е из любого выше описанного места интерфейса Выбрать место назначения копирования и выполнить функцию вставить. Далее на экране будет отражн процесс копирования в форме Progress Удаление. Удаление файлов происходит при помощи вызова функции удаления из любой части интерфейса. После вызова, удалить директорию в случае если директория не пуста, будет запрошено потвержжение на
удаление, файлы будет запрошено потверждение удаления и приведн список удаляемых файлов, если удаляемый файл имеет атрибуты ReadOnly только для чтения также будет запрошено подтверждение. Переименование. При переименовании на экран выводиться форма, предлагающая ввести новое имя для файла.