Файловый менеджер

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    441,17 Кб
  • Опубликовано:
    2012-06-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Файловый менеджер

Министерство образования Республики Беларусь

Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники»

Факультет компьютерных систем и сетей

Кафедра программного обеспечения информационных технологий






ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе на тему

Файловый менеджер

Дисциплина

Основы алгоритмизации и программирование (ОАиП)

Студент гр. 151005

Федюкович С.А.

Руководитель

асс. Данилова Г.В.



Минск 2012г.

ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ

Проект1 - В Borlandâ Delphi проектом называется совокупность файлов, создаваемых в процессе разработки программы.

Текущий путь2 - путь к каталогу с которым в данный момент работает пользователь.

ВВЕДЕНИЕ

При работе в любой операционной системе (ОС), в том числе и в Windows, возникает необходимость в манипуляции файлами. Пользователю всегда необходимо иметь возможность для копирования, перемещения, переименования, удаления и, конечно же, запуска файлов. Для осуществления этих, и других операций с файлами, применяются специальные программы - файловые менеджеры (также иногда называемые оболочками). При работе в ОС Windows 9x/NT/XP/Vista/7 можно пользоваться стандартной программой Explorer, которая практически интегрирована в Windows, а также можно применять файловые менеджеры сторонних разработчиков.

Существуют два основных типа файловых менеджеров:)   Навигационные (пространственные) - например Проводник в Windows.

б) Двупанельные - например FAR, Total Commander.

Общепризнано, что двупанельные файловые менеджеры лучше, чем навигационные. Они отличаются удобством и быстротой работы, количество действий при работе с файлами (копирование, перемещение) снижается в разы. Файловые менеджеры, в зависимости от операционной системы, в которой они используются, подразделяются на:

А) Менеджеры Windows - например Проводник (встроенный в Windows), FAR, Total Commander.

Б) Менеджеры Linux - например Gnome Commander, Krusader.

В) Менеджеры Mac OS - например Finder (встроенный) Disk Order.

Г) Кроссплатформенные (работающие в нескольких операционных системах) - например JC, muCommander.

В курсовом проекте требовалось разработать файловый менеджер. Курсовой проект (получивший рабочее название FedorCommander) выполнен в Borlandâ Delphi 7.

. ПОСТАНОВКА ЗАДАЧИ

Разработать файловый менеджер для операционных систем семейства Microsoftâ Windows в котором реализованы базовые операции с файлами и папками:

а). Вывод списка файлов и каталогов;

б). Возможность перемещения по каталогам;

в). Возможность выбора диска для работы;

г). Запуск приложений;

д). Копирование, перемещение, переименование и удаление файлов и каталогов;

е). Создание новых каталогов.

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

2 ТЕХНОЛОГИИ, МЕТОДЫ, СТРУКТУРЫ, ПРИНЦИПЫ ПОЛОЖЕННЫЕ В ОСНОВУ АЛГОРИТМА

В Delphi существует понятие - подпрограммы управления файлами (category File management routines). Процедуры и функции входящие в эту категорию находятся в модулях System, SysUtils и FileCtrl. Также в программе будет использоваться модуль ShellAPI.

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

SysUtils function CreateDir(const Dir: string): Boolean; - Создание нового каталога;function DeleteFile(const FileName: string): Boolean; - Удаление файла;function FileExists(const FileName: string): Boolean; - Проверка наличия файла;function RemoveDir(const Dir: string): Boolean; - Удаление каталога;function RenameFile(const OldName, NewName: string): Boolean; - Переименование файла;function SetCurrentDir(const Dir: string): Boolean; - Установка текущего каталога;ShellExecute( hwnd: THandle, lpOperation: PChar, lpFile: PChar, lpParameters: PСhar, lpDirectory: PChar, nShowCmd: integer ); - Запуск приложений.

Первоочередной задачей при разработке файлового менеджера является поиск файлов. Рассмотрим два основных вида поиска файлов.

а) Программный поиск файлов с помощью языка программирования object pascal (положенного в основу Delphi).

Delphi функции поиска:

- Ищет первый файл;- Продолжает поиск;

FindClose - Заканчивает поиск.

Вся организация цикла поиска сводится к:

Задание условий поиска. Это каталог и маска искомого элемента или элементов, атрибуты элемента(ов). При задании условий поиска сразу происходит поиск первого подходящего под условие элемента. Это функция FindFirst.

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

Закрытие поиска и освобождение памяти, выделяемой системой под поиск. Команда FindClose.

Функция FindFirst

Синтаксис:

(КАТАЛОГ_ПОИСКА_И_МАСКА_ФАЙЛА,

АТРИБУТЫ_ИСКОМОГО_ФАЙЛА, ПОИСКОВОЯ_ПЕРЕМЕННАЯ);

где: Каталог для поиска и маска искомого элемента - строковая величина, имеющая тип String, может, например, содержать 'c:\*.*' - все элементы в корне диска С. Требуется помнить, что указывается полный путь для поиска.

Атрибуты искомого элемента это пользовательские или системные атрибуты, которые может иметь файл (каталог, метка диска). Вот их перечень:- Файлы "только чтение".- Скрытые файлы.- Системные файлы.- Файл метки диска- Атрибут признака каталога.- Обычный файл. По умолчанию устанавливается на заново создаваемых файлах.- Если установить в качестве атрибута искомых элементов, то будет произведен поиск по всем вышесказанным атрибутам.

При поиске элементов имеющих атрибуты "каталог" и "скрытый" можно применить знак математического сложения, например

+ faHidden.

Поисковая переменная имеет тип TSearchRec. В нее, при успешном результате поиска, будет занесены все необходимые данные о найденном файловом элементе. Часть полей этой переменной предназначена пользователю (имя, атрибуты, размер и дата-время), а часть полей внутренние и используются самими функциями. Тип описан так:

TSearchRec = record: Integer;: Integer;: Integer;: TFileName;: Integer;: THandle;

FindData: TWin32FindData;;

Пользовательские поля:

($00) Time - время и дата последней модификации в DOS формате

($04) Size - размер в байтах младшие 4 байта (т.е. < 4Gb)

($08) Attr - атрибуты

($0C) Name - имя файла (длинное имя)

Внутренние поля:

($10) ExcludeAttr - атрибуты исключаемых файлов

($14) FindHandle - описатель (дескриптор) поиска

($18) FindData - данные возвращаемые Windows

Поскольку FindFirst является функцией, то она должна сама возвращать некоторое значение. Это значение имеет тип Integer и означает результат поиска файла (код ошибки поиска). Если файл найден, то принимает нулевое значение.


Эта функция продолжает поиск, заданный в функции FindFirst. Возвращает значение результата поиска.

Процедура FindClose( ПОИСКОВАЯ_ПЕРЕМЕННАЯ );

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

б) Рассмотрим программный поиск файлов с помощью функций поиска Windows.

При создании программ для Windows более корректно применять стандартные функции этой системы. Для работы с ними не требуется создавать специальные переменные файлового типа: в системе Windows каждый файл имеет уникальный цифровой идентификатор (тип Integer). По-английски он называется Handle, и под таким названием присутствует в описании многих функций.функции поиска:

- Ищет первый файл;- Продолжает поиск;

FindClose - Заканчивает поиск.

function FindFirstFile(lpFileName: PChar; var lpFindFileData: TWIN32FindData): THandle;

Ищет первый файл или каталог, имя которого удовлетворяет указанному шаблону.

- Шаблон, содержащий имя файла или каталога.- Указатель на буфер для приема результатов поиска. Имеет структуру:

TWIN32FindData = record: DWORD;: TFileTime;: TFileTime;: TFileTime;: DWORD;: DWORD;: DWORD;: DWORD;: array[0..MAX_PATH - 1] of AnsiChar;: array[0..13] of AnsiChar;;

Функция передает внутрь Windows шаблон и открывает описатель поиска, который с этого момента однозначно связан с шаблоном. Если функция находит файл, удовлетворяющий условиям шаблона, то она заполняет соответствующие поля буфера и возвращает описатель поиска. Поля заполняются следующим образом:

Смещение Имя                    Значение

$000            dwFileAttributes    - атрибуты файла

$004            ftCreationTime      - время создания

$00C           ftLastAccessTime - время последнего доступа

$014            ftLastWriteTime    - время последней модификации

$01C           nFileSizeHigh        - старшая часть длины файла, если >4Gb

$020            nFileSizeLow        - младшая часть длины файла

$024            dwReserved0        - резерв

$028            dwReserved1        - резерв

$02C           cFileName            - длинное имя файла заканчивающееся пустым символом

$130            cAlternateFileName         - псевдоним.

В случае неудачи буфер не заполняется и возвращается недействительный описатель (INVALID_HANDLE_VALUE = -1). Код ошибки можно узнать, вызвав GetLastError. Описатель поиска необходим для продолжения и закрытия поиска.

файл менеджер алгоритм

function FindNextFile(hFindFile: THandle; var lpFindFileData: TWIN32FindData): BOOL;

Продолжает поиск, начатый FindFirstFile используя ее шаблон для поиска.

Описатель поиска, полученный от предварительно вызванной функции FindFirstFile.Указатель на буфер для приема результатов поиска.

Используя описатель поиска, полученный от FindFirstFile, функция FindNextFile продолжает поиск. Поиск проводится на основании раннее переданного внутрь Windows шаблона, который однозначно связан с описателем. Если функция находит файл, удовлетворяющий условиям шаблона, то она заполняет соответствующие поля буфера и возвращает True. В случае неудачи буфер не заполняется и возвращает False. Код ошибки можно узнать, вызвав GetLastError.

function FindClose(hFindFile: THandle): BOOL;

Заканчивает поиск начатый FindFirstFile.

- Описатель поиска, полученный от первоначально вызванной функции FindFirstFile.

Уведомляет Windows о необходимости освободить ресурсы, которые были задействованы в проводимом поиске. В случае успеха возвращает True, иначе False. Код ошибки можно узнать, вызвав GetLastError. В любом случае дальнейшее использование описателя невозможно.

3 РАЗРАБОТКА СТРУКТУРЫ ПРОГРАММЫ

3.1 Структура программы

Файловый менеджер

А) Вывод списка файлов и каталогов;

1. Определить путь поиска

. Поиск файлов и каталогов с помощью системы

. Добавление найденных файлов и каталогов в компонент вывода файлов

Б) Перемещения по каталогам

. Получить имя каталога

. Поиск и вывод элементов запрашиваемого каталога

В) Выбор диска для работы;

. Получить имя диска

. Определить доступность диска

. Поиск и вывод элементов запрашиваемого диска

Г) Открытие файлов;

. Получить имя файла

. Запросить файл у системы

. Отобразить содержимое файла

Д) Копирование файлов и каталогов;

. Получить имя файла/каталога

. Получить путь для копирования

. Отправить запрос на копирование системе

. Обновить список файлов и каталогов

Е) Перемещение файлов и каталогов

. Получить имя файла/каталога

. Получить путь для перемещения

. Отправить запрос на перемещение системе

. Обновить списки файлов и каталогов

Ж) Переименование файлов и каталогов

. Получить имя файла/каталога

. Получить новое имя файла/каталога

. Отправить запрос на переименование системе

. Обновить список файлов и каталогов

З) Удаление файлов и каталогов

. Получить имя файла/каталога

. Отправить запрос на удаление системе

. Обновить список файлов и каталогов

. Получить имя нового каталога

. Получить путь для создания каталога

. Отправить запрос на создание каталога системе

. Обновить список файлов и каталогов

3.2 Схема работа программы

Рисунок 3.1 - Схема работы программы

Программное описание процедур находятся в Приложении.

.3 Схема алгоритма №1

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

Рисунок 3.2 - Схема присваивания иконок

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

3.4 Схема алгоритма №2

Запуск выделенного элемента

Рисунок 3.2 - Схема запуска элемента

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

3.5 Состав проекта

Проект1 FedorCommander состоит, помимо файлов, создаваемых системой программирования автоматически, из трёх модулей (MainUnit, UnitAdd и Unit1).

В заголовочном файле (хедере) первого модуля (MainUnit), находится описание главной формы программы, создаваемой при ее запуске, в теле этого модуля находятся исходные тексты обработчиков событий, порождаемых теми или иными действиями пользователя в главной форме программы (MainForm). Также описаны все функции, на вызове которых строится работа программы

Во втором модуле (UnitAdd) находится описание и функции обработчики событий для формы (FormDir), являющейся диалоговым окном создания новой директории.

В третьем модуле (Unit1) находится описание для формы (FormAbout), являющейся окном сведений о программе.

4. РАЗРАБОТКА ПРОГРАММЫ

4.1 Разработка процедуры TMainForm.FormCreate

Разработка процедуры присваивания компонентам вывода файлов списка маленьких и больших системных иконок.(Схема алгоритма №1)

Для работы этой процедуры понадобиться модуль shellapi, поэтому запишем его в раздел uses. Листинг процедуры находится в Приложении. Процедура будет описываться в обработчике события OnCreate.

В первых четырёх строках создаются списки маленьких и больших иконок для двух компонентов вывода файлов(lvLeft, lvRight):

.LargeImages:=TImageList.Create(self);.SmallImages:=TImageList.Create(self);.LargeImages:=TImageList.Create(self);.SmallImages:=TImageList.Create(self);

Потом запрашиваем у системы список больших иконок. Для этого используется функция SHGetFileInfo, которая возвращает информацию о файле, папке или диске. Функция имеет пять параметров:

А.Путь к файлу;

Б. Атрибуты;

В. Указатель на TSHFileInfo;

Г. Размер TSHFileInfo;

Д. Флаги, указывающие на тип информации, запрашиваемой у системы.

В нашем примере первые два параметра пустые, это показывает, что нужна системная информация. Третий параметр - переменная SFI описанная в разделе var процедуры. В качестве флагов указывается SHGFI_SYSICONINDEX и SHGFI_LARGEICON. SHGFI_SYSICONINDEX означает, что нужно вернуть указатель на системный список иконок. SHGFI_LARGEICON означает, что нужны большие иконки.

Пример: SysImageList:=SHGetFileInfo('', 0, SFI, SizeOf(TSHFileInfo),

SHGFI_SYSICONINDEX or SHGFI_LARGEICON);

Если указатель на большие системные иконки получен, то присваиваем его списку картинок lvLeft и lvRight:

if SysImageList <> 0 then.LargeImages.Handle:=SysImageList;.LargeImages.ShareImages:= True;.LargeImages.Handle:=SysImageList;.LargeImages.ShareImages:= True;;

При втором вызове функции SHGetFileInfo запрашиваем маленькие иконки(SHGFI_SMALLICON):

SysImageList:=SHGetFileInfo('', 0, SFI, SizeOf(TSHFileInfo),_SYSICONINDEX or SHGFI_SMALLICON);

Аналогично присваиваем компонентам вывода маленькие иконки:

if SysImageList <> 0 then.SmallImages.Handle:= SysImageList;.SmallImages.ShareImages:=True;.SmallImages.Handle:= SysImageList;.SmallImages.ShareImages:=True;

Системный список иконок содержит все иконки, установленные в системе и ассоциированные с разными типами файлов.

4.2 Разработка процедуры OpenElem

Разработка процедуры запуска выделенного элемента

(Схема алгоритма №2)

Листинг процедуры находится в Приложении. В листинге процедура будет иметь имя procedure OpenElem.

Процедура имеет три параметра:

А. lv: TListViem - компонент вывода файлов(lvLeft или lvRight);

Б. Curr_Dir: string - Текущий путь2 ;

В. Edit: TEdit - компонент отображения текущего пути2 (EditLeft или EditRight);

Пример:OpenElem(lv: TListView; var Curr_Dir: string; Edit: TEdit);

В первой строке кода осуществляется проверка произведенного выбора (по какому объекту был произведен щелчок мышью). Для этого проверяется нулевой дополнительный параметр выделенного элемента:

if (lv.Selected.SubItems[0]='[Папка]')

А. Если выделенный элемент папка, то осуществим проверку: является ли она родительским каталогом:

if lv.Selected.Caption='..'

1)Then - Если это родительский каталог, то удалим из строки текущего пути имя папки в которой ведётся работа.

Определим количество символов в имени активной папки (символы до знака «\») и удалим их используя процедуру Delete.

Пример:

i:=1;:=Length(Curr_Dir);Curr_Dir[len-i] <> '\' do Inc(i);(Curr_Dir, len-i, i);

). Если это не родительский каталог, то добавим к текщему пути имя выделенной папки:

Curr_Dir:=Curr_Dir + lv.Selected.Caption + '\';

После определения нового текущего пути, отобразим элементы этой папки и выведем текущий путь на основную форму:

LoadFileList(lv, Curr_Dir);.Text:= Curr_Dir;

Б. В случае с файлом используем функцию ShellExecute. Данная функция имеет шесть параметров:

1)     Программа, отвечающая за запуск приложения. (Укажем главное окно программы Application.MainForm.Handle);

2)      Строка, указывающая на операцию, которую надо выполнить. (Укажем nil для запуска файла);

)        Строка, содержащая путь к файлу (Укажем Текущий путь + имя выделенного элемета: Curr_Dir + lv.Selected.Caption);

)        Папка по умолчанию (Укажем Текущий путь: Curr_Dir);

)        Команда показа. (Укажем SW_SHOW для нормального отображения окна.

Пример: ShellExecute(Application.MainForm.Handle, nil, PChar(Curr_Dir + lv.Selected.Caption), '', PChar(Curr_Dir), SW_SHOW);

5. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

Файловый менеджер FedorCommander - это программа, позволяющая выполнять навигацию по файловой системе, перемещать файлы и другие объекты, запускать исполняемые файлы и выполнять друние действия над файлами и папками средствами Графического пользовательского интерфейса.

Для запуска программы дважды щелкните мышью по пиктограмме файла FedorCommander.

Рисунок 1 - Главное окно программы

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

А. F7 - Создать папку

Б. F5 - Копировать

В. F6 - Переместить

Г. F9 - Переименовать

Д. F8 - Удалить

Е. Alt+F4 - Выход из программы

Ввиду возможности случайной активации, «горячие клавиши» для кнопки «Выключение компьютера» не создавались.

Запуск файлов и открытие каталогов осуществляется двойным щелчком мыши по элементу в списке содержащем файлы и каталоги.

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

ЗАКЛЮЧЕНИЕ

Результатом выполнения курсовой работы явился простейший файловый менеджер «FedorCommander» предназначенный для работы под управлением операционной системы семейства Windows. Написанная программа реализует базовые функции работы с файлами и каталогами, такие как:

А. Вывод списка файлов и каталогов;

Б. Возможность перемещения по каталогам;

В. Возможность выбора диска для работы;

Г. Запуск приложений;

Д. Копирование, перемещение, переименование и удаление файлов и каталогов;

Е.Создание новых каталогов.

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

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

б. Проигрыватель аудио и видео информации;

в. Возможность работы с сетевыми дисками;

г. Отображение списка системных процессов;

д. Редактра реестра;

В ходе выполнения курсовой работы были закреплены знания о работе с различными компонентами в Borlandâ Delphi 7 и изучены новые методы и принципы программной работы с файлами.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

А. Delphi 7: Наиболее полное руководство / А.Д. Хомоненко [и др.]. - Санкт-Петербург: БХВ-ПЕТЕРБУРГ, 2008. - 1216с.

Б. Флёнов, М.Е. Библия Delphi: 3-е издание / М.Е. Флёнов. -

Санкт-Петербург: БХВ-ПЕТЕРБУРГ, 2011. - 688с.

В. Глухова, Л.А. Основы алгоритмизации и программирования: учеб. Пособие / Л.А. Глухова - Минск: БГУИР, 2006. - 195с.

Г. Культин, Н.Б. Основы программирования в Delphi 7 /

Культин Н.Б. - Санкт-Петербург: БХВ-ПЕТЕРБУРГ, 2005. - 336с.

Д. Справка Delphi 7.

Е. Занкович, А.П. Структуры и алгоритмы обработки данных: конспект лекций / А.П. Занкович, И.М. Марина, Л.В. Бочкарёва - Минск: БГУИР, 2008. - 87с.

Ж. Смирнов, С.И. Уроки программирования: Pascal - Delphi / С.И. Смирнов - Красноярск: Красноярск, 2011. - 150с.

З. Бакнелл, Д. Фундаментальные алгоритмы и структуры данных в Delphi / Д. Бакнелл - Санкт-Петербург: ДиаСофтЮП, 2003. - 560с.

И. <http://articles.org.ru/docum/filefunc.php> - «Работа с файлами»

К. <http://professionalprograms.ru/?p=36> - «Отыскивание файлов на Delphi»

ПРИЛОЖЕНИЕ A

MainUnit;

, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ComCtrls, StdCtrls, FileCtrl, ShellAPI, Menus, XPMan, ToolWin,, ImgList, DateUtils;

= class(TForm): TListView;: TDriveComboBox;: TEdit;: TListView;: TDriveComboBox;: TEdit;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TControlBar;: TToolBar;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TToolButton;: TImageList;: TLabel;: TTimer;: TToolButton;: TToolButton;drvcbbLeftChange(Sender: TObject);lvLeftKeyDown(Sender: TObject; var Key: Word;: TShiftState);drvcbbRightChange(Sender: TObject);lvRightKeyDown(Sender: TObject; var Key: Word;: TShiftState);FormCreate(Sender: TObject);lvLeftDblClick(Sender: TObject);lvRightDblClick(Sender: TObject);mniNewDirClick(Sender: TObject);lvLeftClick(Sender: TObject);lvRightClick(Sender: TObject);mniDeleteClick(Sender: TObject);mniCopyElemClick(Sender: TObject);mniExitClick(Sender: TObject);mniAboutProgrClick(Sender: TObject);mniReNameClick(Sender: TObject);mniMoveToClick(Sender: TObject);lvLeftColumnClick(Sender: TObject; Column: TListColumn);lvRightColumnClick(Sender: TObject; Column: TListColumn);tmrTimeTimer(Sender: TObject);btnPowerOffClick(Sender: TObject);;

: TMainForm;_DirL, Curr_DirR: string;: Integer = 1;

LoadFileList(lv: TListView; const dir: string);

Unit1, UnitAdd;

DiskInDrive(ADriveLetter : Char) : Boolean;,,,: Cardinal;:= GetDiskFreeSpace(PChar(ADriveLetter+':\'),,,,);;

LoadFileList(lv: TListView; const dir: string);: THandle;: TSHFileInfo;: TWin32FindData;, temp_ext: string;: TFileTime;: DWORD;: TDateTime;:=IncludeTrailingPathDelimiter(dir);(dDir);.Items.BeginUpdate;.Clear;:=FindFirstFile(PChar(dDir+'*'), FindData);Handle <> Invalid_Handle_Value thenFindNextFile(Handle, FindData) do(PChar(dDir+FindData.cFileName), 0, ShInfo, SizeOf(ShInfo),     SHGFI_TYPENAME or SHGFI_SYSICONINDEX);(FindData.dwFileAttributes and faHidden) = faHidden then;lv.Items.Add do:=ExtractFileName(FindData.cFileName);:= ShInfo.iIcon;_ext:=ExtractFileExt(FindData.cFileName);(FindData.dwFileAttributes and faDirectory) = faDirectory.Add('[Папка]').Add(Copy(temp_ext, 2, Length(temp_ext) - 1));

SubItems.Add(FloatToStrF(FindData.nFileSizeHigh*4294967296 + FindData.nFileSizeLow, ffGeneral, 18, 0));(FindData.ftLastWriteTime, lft);(lft, LongRec(dft).Hi, LongRec(dft).Lo);:=FileDateToDateTime(dft);.Add(DateTimeToStr(dt));;;.FindClose(Handle);;.Items.EndUpdate;;

OpenElem(lv: TListView; var Curr_Dir: string; Edit: TEdit);, i: Integer;(lv.Selected.SubItems[0]='[Папка]') thenlv.Selected.Caption='..' then:=1;:=Length(Curr_Dir);Curr_Dir[len-i] <> '\' do                                                              Inc(i);(Curr_Dir, len-i, i);_Dir:=Curr_Dir + lv.Selected.Caption + '\';(lv, Curr_Dir);.Text:= Curr_Dir;(Application.MainForm.Handle, nil, PChar(Curr_Dir + lv.Selected.Caption), '', PChar(Curr_Dir), SW_SHOW);;

RemoveAll(path: string);: TSearchRec;FindFirst(path + '\*.*', faAnyFile, sr) = 0 thensr.Attr and faDirectory = 0 then(path+'\'+sr.Name)Pos('.', sr.Name) <=0 then(path+'\'+sr.Name);FindNext(sr) <> 0 ;(sr);(PChar(path));;CopyDir(sourcepath, targetpath: string);: TSearchRec;, KonDir: string;: Integer;:=sourcepath;:=targetpath;:=IncludeTrailingBackslash(ScanDir);:=FindFirst(ScanDir+'*.*', faAnyFile, sr);ISearch=0 do(sr.Name<>'') and (sr.Name<>'.') and (sr.Name<>'..') then:=IncludeTrailingBackslash(KonDir);:=IncludeTrailingBackslash(ScanDir);((sr.Attr and FaDirectory) = faDirectory) thennot DirectoryExists(KonDir+sr.Name) then(KonDir+sr.Name);(ScanDir+sr.Name, KonDir+sr.Name);(PChar(ScanDir+sr.Name), PChar(KonDir+sr.Name), False);;:=FindNext(sr);(sr);('Ошибка...');

SortCaptionAsString(Item1, Item2: TListItem;: Integer):Integer; stdcall;:=0;AnsiUpperCase(Item1.Caption) > AnsiUpperCase(Item2.Caption) then:= ParamSortAnsiUpperCase(Item1.Caption) < AnsiUpperCase(Item2.Caption) then:= - ParamSort;;

SortFirstSubItemAsString(Item1, Item2: TListItem;: Integer): Integer; stdcall;:= 0;AnsiUpperCase(Item1.SubItems[0]) > AnsiUpperCase(Item2.SubItems[0]) then:= ParamSortAnsiUpperCase(Item1.SubItems[0]) < AnsiUpperCase(Item2.SubItems[0]) then:= - ParamSort;;

SortSecondSubItemAsInteger(Item1, Item2: TListItem;: Integer): integer; stdcall;:= 0;StrToFloat(Item1.SubItems[1])>StrToFloat(Item2.SubItems[1]) then:= ParamSortStrToFloat(Item1.SubItems[1]) < StrToFloat(Item2.SubItems[1]) then:= - ParamSort;;

SortThirdSubItemAsDate( Item1, Item2: TListItem;: Integer): Integer; stdcall;:=0;StrToDateTime(Item1.SubItems[2]) > StrToDateTime(Item2.SubItems[2]) then:= ParamSortStrToDateTime(Item1.SubItems[2]) < StrToDateTime(Item2.SubItems[2]) then:= - ParamSort;;

{$R *.dfm}

TMainForm.drvcbbLeftChange(Sender: TObject);not DiskInDrive(drvcbbLeft.Drive) then('Диск не найден');;(lvLeft, drvcbbLeft.Drive+':');_DirL:=drvcbbLeft.Drive + ':\';.SetFocus;lvLeft.Items.Count <> 0 then.ItemIndex:=0;.Text:=drvcbbLeft.drive+':'+'\';;

TMainForm.lvLeftKeyDown(Sender: TObject; var Key: Word;: TShiftState);(Key = 13) and (lvLeft.Selected <> nil) then(lvLeft, Curr_DirL, EditLeft);;

TMainForm.drvcbbRightChange(Sender: TObject);not DiskInDrive(drvcbbRight.Drive) then('Диск не найден');;(lvRight, drvcbbRight.Drive+':');_DirR:=drvcbbRight.Drive + ':\';.SetFocus;lvRight.Items.Count <> 0 then.ItemIndex:=0;.Text:=drvcbbRight.drive+':'+'\';;TMainForm.lvRightKeyDown(Sender: TObject; var Key: Word;: TShiftState);(Key=13) and (lvRight.Selected<>nil) then(lvRight, Curr_DirR, EditRight);;

TMainForm.FormCreate(Sender: TObject);: uint; SFI: TSHFileInfo;.LargeImages:=TImageList.Create(self);.SmallImages:=TImageList.Create(self);.LargeImages:=TImageList.Create(self);.SmallImages:=TImageList.Create(self);:=SHGetFileInfo('', 0, SFI, SizeOf(TSHFileInfo),_SYSICONINDEX or SHGFI_LARGEICON);SysImageList <> 0 then.LargeImages.Handle:=SysImageList;.LargeImages.ShareImages:= True;.LargeImages.Handle:=SysImageList;.LargeImages.ShareImages:= True;;:=SHGetFileInfo('', 0, SFI, SizeOf(TSHFileInfo),_SYSICONINDEX or SHGFI_SMALLICON);SysImageList <> 0 then.SmallImages.Handle:= SysImageList;.SmallImages.ShareImages:=True;.SmallImages.Handle:= SysImageList;.SmallImages.ShareImages:=True;;

TMainForm.lvLeftDblClick(Sender: TObject);lvLeft.Selected<>nil then(lvLeft, Curr_DirL, EditLeft);;

TMainForm.lvRightDblClick(Sender: TObject);lvRight.Selected<>nil then(lvRight, Curr_DirR, EditRight);;

TMainForm.mniNewDirClick(Sender: TObject);.ShowModal;;

TMainForm.lvRightClick(Sender: TObject);.Selected:=nil;;

TMainForm.mniDeleteClick(Sender: TObject);(lvLeft.Selected = nil) and (lvRight.Selected = nil) then

ShowMessage(‘Выберите элемент для удаления...');

Exit;MessageDlg('Вы уверены?', mtInformation, [mbOK, mbCancel], 0)=mrOk thenlvLeft.Selected<>nil thenlvLeft.Selected.SubItems[0]<>'[Папка]' then(Curr_DirL+lvLeft.Selected.Caption)Pos(Curr_DirL+lvLeft.Selected.Caption, Curr_DirR) <> 0 then(lvRight, drvcbbRight.Drive + ':');_DirR:=drvcbbRight.Drive+':\';;(PChar(Curr_DirL+lvLeft.Selected.Caption));;(lvLeft, Curr_DirL);Curr_DirL = Curr_DirR then    

LoadFileList(lvRight, Curr_DirR)lvRight.Selected.SubItems[0]<>'[Папка]' then(Curr_DirR+lvRight.Selected.Caption)Pos(Curr_DirR+lvRight.Selected.Caption, Curr_DirL) <> 0 then(lvLeft, drvcbbLeft.Drive + ':');_DirL:=drvcbbLeft.Drive+':\';;(PChar(Curr_DirR+lvRight.Selected.Caption));;(lvRight, Curr_DirR);Curr_DirR = Curr_DirL then(lvLeft, Curr_DirL);;;;

TMainForm.mniCopyElemClick(Sender: TObject);: string;(lvLeft.Selected = nil) and (lvRight.Selected = nil) then

ShowMessage(‘Выберите элемент для копирования...');

Exit;lvLeft.Selected <> nil then:=Curr_DirR+lvLeft.Selected.Caption;not InputQuery('Крпирование', 'Куда копируем?', kyda) then;lvLeft.Selected.SubItems[0] = '[Папка]' then(kyda);(Curr_DirL + lvLeft.Selected.Caption, kyda)not CopyFile(PChar(Curr_DirL + lvLeft.Selected.Caption),(kyda), false) then('Ошибка копирования');:= Curr_DirL+lvRight.Selected.Caption;not InputQuery('Копирование', 'Куда копируем?', kyda) then;lvRight.Selected.SubItems[0] = '[Папка]' then(kyda);(Curr_DirR + lvRight.Selected.Caption, kyda)not CopyFile(PChar(Curr_DirR + lvRight.Selected.Caption),(kyda), false) then('Ошибка копирования’);;(lvLeft, Curr_DirL);(lvRight, Curr_DirR);;

TMainForm.mniExitClick(Sender: TObject);;;

TMainForm.mniAboutProgrClick(Sender: TObject);.ShowModal;;

TMainForm.mniReNameClick(Sender: TObject);: string;(lvLeft.Selected = nil) and (lvRight.Selected = nil) then

ShowMessage(Выберите элемент для переименования...');

Exit;lvLeft.Selected <> nil then:=Curr_DirL + InputBox('Переименование', 'Новое имя',.Selected.Caption);newName<>Curr_DirL then(Curr_DirL+lvLeft.Selected.Caption, newName)

ShowMessage('Не введено новое имя');

LoadFileList(lvLeft, Curr_DirL);:=Curr_DirR + InputBox('Переименование', 'Новое имя',.Selected.Caption);newName<>Curr_DirR then(Curr_DirR+lvRight.Selected.Caption, newName)

ShowMessage('Не введено новое имя');

LoadFileList(lvRight, Curr_DirR);;;

TMainForm.mniMoveToClick(Sender: TObject);: string;(lvLeft.Selected = nil) and (lvRight.Selected = nil) then

ShowMessage('Выберите элемент для перемещения...');

Exit;lvLeft.Selected <> nil then:= Curr_DirR+lvLeft.Selected.Caption;InputQuery('Перемещение', 'Куда перемещаем?', kyda) thennot        MoveFile(PChar(Curr_DirL + lvLeft.Selected.Caption),(kyda)) then('Ошибка перемещения’);:= Curr_DirL+lvRight.Selected.Caption;InputQuery('Перемещение', 'Куда перемещаем?', kyda) thennot MoveFile(PChar(Curr_DirR + lvRight.Selected.Caption),(kyda)) then('Ошибка перемещения’);;(lvLeft, Curr_DirL);(lvRight, Curr_DirR);;

TMainForm.lvLeftColumnClick(Sender: TObject;: TListColumn);:=-Sort;Column = lvLeft.Columns[0] then.CustomSort( @SortCaptionAsString, Sort);Column = lvLeft.Columns[1] then.CustomSort( @SortFirstSubItemAsString, Sort);Column = lvLeft.Columns[2] then.CustomSort( @SortSecondSubItemAsInteger, Sort);Column = lvLeft.Columns[3] then.CustomSort( @SortThirdSubItemAsDate, Sort);;

TMainForm.lvRightColumnClick(Sender: TObject;: TListColumn);:=-Sort;Column = lvRight.Columns[0] then.CustomSort( @SortCaptionAsString, Sort);Column = lvRight.Columns[1] then.CustomSort( @SortFirstSubItemAsString, Sort);Column = lvRight.Columns[2] then.CustomSort( @SortSecondSubItemAsInteger, Sort);Column = lvRight.Columns[3] then.CustomSort( @SortThirdSubItemAsDate, Sort);;

TMainForm.tmrTimeTimer(Sender: TObject);DayOfWeek_(): string;: Byte;:=DayOfWeek(Date);x of

: Result:='Воскресенье';

: Result:='Понедельник';

: Result:='Вторник';

: Result:='Среда';

: Result:='Четверг';

: Result:='Пятница';

: Result:='Суббота';;;

lblDateAndTime.Caption:='Ñåãîäíÿ: '+ DayOfWeek_ + ' '+ DateToStr(Date) +#13#10+ ' ' + TimeToStr(Time);;TMainForm.btnPowerOffClick(Sender: TObject);(handle, nil,'shutdown',' -s -t 00','', SW_SHOWNORMAL);;

.

UnitAdd;

, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls;

= class(TForm): TLabel;: TEdit;: TButton;btnOKClick(Sender: TObject);

{ Private declarations }

{ Public declarations };

: TFormDir;;

{$R *.dfm}

TFormDir.btnOKClick(Sender: TObject);MainForm.lvLeft.Selected <> nil thenCreateDir(Curr_DirL + edtName.Text) then.Text:='';(MainForm.lvLeft, Curr_DirL);Curr_DirL = Curr_DirR then(MainForm.lvRight, Curr_DirR);.Close('Указано неверное имя');.Text:=''CreateDir(Curr_DirR + edtName.Text) then.Text:='';(MainForm.lvRight, Curr_DirR);Curr_DirR = Curr_DirL then(MainForm.lvLeft, Curr_DirL);.Close('Указано неверное имя');.Text:='';;

.

Unit1;

, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls;

= class(TForm): TMemo;: TImage;: TLabel;

{ Private declarations }

{ Public declarations };

: TFormAbout;

MainUnit;

{$R *.dfm}

.

Похожие работы на - Файловый менеджер

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!