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

ПримечаниеФайловый менеджер (получивший рабочее название Vontrop Commander) выполнен в системе визуального программирования Borland C++Builder 6.0, с использованием библиотеки визуальных компонентов (VCL) и функций Windows API. Реализованы базовые операции с файла
Загрузить архив:
Файл: ref-21509.zip (941kb [zip], Скачиваний: 141) скачать

Министерство образования Российской Федерации

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧЕРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

Факультет информационных технологий

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

и автоматизированных систем

КУРСОВОЙ ПРОЕКТ

по программированию

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

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

ГОУ ОГУ 220400.4405.22 ПЗ

Руководитель проекта

__________________Юркевская Л.А.

«__»____________________2005г.

Исполнитель

студент гр.04 ПОВТ-2

________________Портнов Д.И.

«__»____________________2005г.

Оренбург 2005

Министерство образования Российской Федерации

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧЕРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

Факультет информационных технологий

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

автоматизированных систем

Задание на курсовой проект

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

                        Исходные данные:        Операционная система: MicrosoftâWindows

                                                                 NT 4.0 и старше.

                                                              Количество устройств хранения информации

                                                                 и их тип определяется программой.

                                                              Файловая система любая, поддерживаемая

                                                                 операционной системой.

                                                              Интерфейс графический, двух панельный.

                                                              Язык разработки C++ любой реализации,

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

                                                                 программирования.

                        Разработать:                 1) Пользовательский интерфейс работы

                                                                  с файлами.

                                                              2) Реализацию заложенных в интерфейсе

                                                                  возможностей: выбора устройства хранения

                                                                  информации, просмотра содержимого

                                                                  директорий, создания новых директорий,

                                                                  операций с файлами и директориями

                                                                  (копирования, перемещения и удаления).

Дата выдачи задания «14» апреля 2005г.

Руководитель                                          Юркевская Л.А.

Исполнитель

студент группы 04 ПОВТ-2                      Портнов Д.И.

Срок защиты проекта «30» мая 2005г.




Аннотация

Пояснительная записка содержит 38 страниц, в том числе 3 рисунка,
30 источников, 2 приложения.

В данном проекте разработан файловый менеджер для операционных систем семейства MicrosoftâWindowsNT 4.0 и старше, в котором реализованы базовые операции с файлами и папками: открытие, перемещение, копирование, удаление, помещение в корзину.

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

ГОУ ОГУ 220400.4405.22 ПЗ

Изм

Лист

№ докум.

Подпись

Дата

Разраб.

Портнов

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

Пояснительная записка.

Лит

Лист

Листов

Провер.

Юркевская

К

3

38

ГОУ ОГУ ФИТ

ПОВТАС 04 ПОВТ-2

Н.контр.

Зав.каф.

Соловьев


Введение. PAGEREF _Toc103029680 h 5

1 Формы программы.. PAGEREF _Toc103029681 h 6

1.1 Главная форма программы.. PAGEREF _Toc103029682 h 6

1.2 Диалог создания каталога. PAGEREF _Toc103029683 h 8

1.3 Диалог создания удаления или перемещения в корзину. PAGEREF _Toc103029684 h 8

2 Работа программы.. PAGEREF _Toc103029685 h 9

2.1 Принцип работы программы.. PAGEREF _Toc103029686 h 9

2.2. Глобальные переменные и константы.. PAGEREF _Toc103029687 h 9

2.3 Функции реализации операций. PAGEREF _Toc103029688 h 10

Список использованных источников. PAGEREF _Toc103029689 h 12

Приложение А Блок-схема взаимодействия компонентов программы.. PAGEREF _Toc103029690 h 13

Приложение Б Исходные тексты программы.. PAGEREF _Toc103029692 h 15


[1].

Создает список корневых директорий доступных устройств хранения информации и отображает этот список в ListDevicesLeft и ListDevicesRight.

Функции не передаются параметры. Не возвращает значения.

Используется функция Windows API GetDriveType.

2.3.2 ScanDir.

Функции предается строка, заканчивающаяся нулем (charPath[]), содержащая путь к директории, в которой производится поиск всех содержащихся в ней папок и файлов и переменная (intPanel), в зависимости от значения которой формируется либо DequeFindLeft (если Panel=LEFT) или DequeFindRight (если Panel=RIGHT).

Используютсятрифункции Windows API:FindFirstFile, FindNextFile, FindClose.

Вызывается в ViewDirectory.

DequeFindLeft (DequeFindRight) – это контейнер библиотеки стандартных шаблонов, являющийся очередью deque, элементами которой являются структуры типа WIN32_FIND_DATA. Тип WIN32_FIND_DATA описан в winbase.h. Ссылка на структуру передается в FindFirstFile и FindNextFile.

2.3.3 StrucFindToFileProp.

Преобразуетструктурутипа WIN32_FIND_DATA в _FileProperty.

Функции передается структура типа WIN32_FIND_DATA и ссылка на структуру типа _FileProperty. Не возвращает значения.

Вызывается в ViewDirectory.

Тип _FileProperty описывается в начале модуля и используется для отображения результатов работы ScanDir в FileListLeft (FileListRight), т.к. некоторые поля WIN32_FIND_DATA не адаптированы для вывода.

2.3.4 ViewDirectory.

Отображает содержимое папки, путь к которой передается в Path[] в активной панели.

Функции предается строка, заканчивающаяся нулем (charPath[]), содержащая путь, который передается в ScanDir, и переменная (intPanel), передаваемая в ScanDir, и в зависимости от значения которой, результаты отображаются в FileListLeft (если Panel=LEFT) или FileListRight (если Panel=RIGHT). Не возвращает значения.

Вызываетсяв HandlerOfOpen, CreateFolder, CopyOrRemove и Deleting.

2.3.5 HandlerOfOpen.

В зависимости от действий пользователя, выполняет различные операции. Если происходит выбор в ListDevicesLeft (ListDevicesRight), то отображается корневая директория, выбранного устройства при условии, что корневые директории панелей не сосвпадают, иначе в активной панели отображается открытая папка неактивной панели. Если происходит нажатие на bCurrentRootDirLeft (bCurrentRootDirRight), то отображается корневая директория текущего устройсва. Если происходит двойной клик (нажатие клавиши Enter) по FileListLeft (FileListRight), то анализируется, какая строка находится сейчас в фокусе, и в зависимости от содержимого, выполняются различные операции. Если в фокусе находится файл, то он открывается приложением, с которым ассоциирован либо, если это приложение, производится его запуск. Если в фокусе находится папка, то отображается ее содержимое. Все действия совершаются с активной панелью.

Функции передается срока, путь к корневой директории устройства (AnsiString RootDir), активная панель (int Panel) и признак смены корневой директории (intDirSel). Возвращает текущий путь активной директории.

Используетсяфункция Windows API ShellExecute.

2.3.6 CreateFolder.

Создает директорию в активной панели.

Функции передается указание на то, какая сейчас панель активна (int Panel). Возвращает значение типа bool, в зависимости от результатов выполнения операции. Функция создает каталог в пути панели, являющейся активной. В качестве текущего пути в каждой панели используются значения соответствующих глобальных переменных.

Используютсяфункции Windows API: CreateDirectory и MessageBox.

2.3.7 Deleting.

Удаляет или помещает в корзину объект (файл или папку, со всеми ее вложенными папками), находящийся в фокусе в активной панели.

В функцию передается признак активной панели (int Panel) и операция (int Operation), которую надо совершить, т.е. удалить или поместить в корзину. Не возвращает значения.

Используетсяфункция Windows API SHFileOperation.

2.3.8 CopyOrRemove.

Перемещает или копирует объект (файл или папку, со всеми ее вложенными папками), находящийся в фокусе в активной панели в папку неактивной панели.

В функцию передается признак активной панели (int Panel) и операция (int Operation), которую надо совершить, т.е. копировать или переместить. Не возвращает значения.

Используетсяфункция Windows API SHFileOperation.


Список использованных источников

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30


приложение А

(обязательное)

Блок-схема взаимодействия компонентов программы

Двойной клик по элементу правой панели

Начало

CreateListOfDevices();

CreateDirAttribSet();

RootDirLeft="C:\";

RootDirRight="C:\";

DirSel=1;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

CurrentPathRight=HandlerOfOpen(RootDirRight, RIGHT, DirSel);

Создание формы

Действие пользователя

Двойной клик по элементу левой панели

А

DirSel=0;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

DirSel=0;

CurrentPathRight=HandlerOfOpen(RootDirRight,RIGHT, DirSel);

Б

RootDirLeft=Form1->ListDevicesLeft->Text.Delete

               (3,(Form1->ListDevicesLeft->Text.Length()-2));

DirSel=1;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

Form1->FileListLeft->SetFocus();

Выбор элемента в левом списке устройств хранения информации


В

А

RootDirRight=Form1->ListDevicesRight->Text.Delete

                       (3,(Form1->ListDevicesRight->Text.Length()-2));

DirSel=1;

CurrentPathRight=HandlerOfOpen(RootDirRight, RIGHT, DirSel);

Form1->FileListRight->SetFocus();

Б

Выбор элемента в правом списке устройств хранения информации

FormDialogCreateDir->Show();

Нажатие кнопки «Создать каталог»

CopyOrRemove(Panel,FO_MOVE);

Нажатие кнопки «Переместить»

CopyOrRemove(Panel,FO_COPY);

Нажатие кнопки «Копировать»

Действие пользователя

FormDialogCreateDir->edNewDirName->Text="";

FormDialogCreateDir->edNewDirName->SetFocus();

FormDialogCreateDir->Hide();

Нажатие кнопки «Отмена»

bool Result=CreateFolder(Panel);

FormDialogCreateDir->edNewDirName->SetFocus();

if (Result==true)

{

FormDialogCreateDir->edNewDirName->Text="";

FormDialogCreateDir->Hide();

}

Нажатие кнопки «OК»

Г

ПРИЛОЖЕНИЕ А

(продолжение)


ПРИЛОЖЕНИЕ А

(продолжение)

В

Г

FormDialogDelete->Show();

FormDialogDelete->bRecycler->SetFocus();

Нажатие кнопки «Удалить»

Действие пользователя

Deleting(Panel,FO_DELETE);

FormDialogDelete->bRecycler->SetFocus();

FormDialogDelete->Hide();

Нажатие кнопки «Удалить»

Deleting(Panel,FO_DELETER);

FormDialogDelete->bRecycler->SetFocus();

FormDialogDelete->Hide();

Нажатие кнопки «В корзину»

FormDialogDelete->bRecycler->SetFocus();

FormDialogDelete->Hide();

Нажатие кнопки «Отмена»

DirSel=2;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

Form1->FileListLeft->SetFocus();

Нажатие левой кнопки «»

Нажатие правой кнопки «»

Нажатие кнопки «Закрыть» системного меню

Конец

DirSel=2;

CurrentPathRight=HandlerOfOpen(RootDirRight, RIGHT, DirSel);

Form1->FileListRight->SetFocus();

В

Г

FormDialogDelete->Show();

FormDialogDelete->bRecycler->SetFocus();

Нажатие кнопки «Удалить»

Действие пользователя

Deleting(Panel,FO_DELETE);

FormDialogDelete->bRecycler->SetFocus();

FormDialogDelete->Hide();

Нажатие кнопки «Удалить»

Deleting(Panel,FO_DELETER);

FormDialogDelete->bRecycler->SetFocus();

FormDialogDelete->Hide();

Нажатие кнопки «В корзину»

FormDialogDelete->bRecycler->SetFocus();

FormDialogDelete->Hide();

Нажатие кнопки «Отмена»

DirSel=2;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

Form1->FileListLeft->SetFocus();

Нажатие левой кнопки «»

Нажатие правой кнопки «»

Нажатие кнопки «Закрыть» системного меню

Конец

DirSel=2;

CurrentPathRight=HandlerOfOpen(RootDirRight, RIGHT, DirSel);

Form1->FileListRight->SetFocus();


приложение б

(обязательное)

Исходные тексты программы.

Unit1.c

//---------------------------------------------------------------------------

#include

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

CreateListOfDevices();

CreateDirAttribSet();

RootDirLeft="C:\";

RootDirRight="C:\";

DirSel=1;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

CurrentPathRight=HandlerOfOpen(RootDirRight, RIGHT, DirSel);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FileListLeftDblClick(TObject *Sender)

{

DirSel=0;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FileListRightDblClick(TObject *Sender)

{

DirSel=0;

CurrentPathRight=HandlerOfOpen(RootDirRight,RIGHT, DirSel);

}

//---------------------------------------------------------------------------


void __fastcall TForm1::ListDevicesLeftSelect(TObject *Sender)

{

RootDirLeft=Form1->ListDevicesLeft->Text.Delete

                        (3,(Form1->ListDevicesLeft->Text.Length()-2));

DirSel=1;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

Form1->FileListLeft->SetFocus();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListDevicesRightSelect(TObject *Sender)

{

RootDirRight=Form1->ListDevicesRight->Text.Delete

                       (3,(Form1->ListDevicesRight->Text.Length()-2));

DirSel=1;

CurrentPathRight=HandlerOfOpen(RootDirRight, RIGHT, DirSel);

Form1->FileListRight->SetFocus();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FileListLeftEnter(TObject *Sender)

{

Panel=LEFT;

Form1->LabelCurrentPathLeft->Color=0x00E9E9E9;

Form1->ListDevicesLeft->Color=0x00E9E9E9;

Form1->FileListLeft->Color=clGradientInactiveCaption;

Form1->LabelCurrentPathRight->Color=0x00C4C4C4;

Form1->ListDevicesRight->Color=0x00C4C4C4;

Form1->FileListRight->Color=0x00C4C4C4;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FileListRightEnter(TObject *Sender)

{

Panel=RIGHT;

Form1->LabelCurrentPathRight->Color=0x00E9E9E9;

Form1->ListDevicesRight->Color=0x00E9E9E9;

Form1->FileListRight->Color=clGradientInactiveCaption;

Form1->LabelCurrentPathLeft->Color=0x00C4C4C4;

Form1->ListDevicesLeft->Color=0x00C4C4C4;

Form1->FileListLeft->Color=0x00C4C4C4;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListDevicesLeftEnter(TObject *Sender)

{

Form1->LabelCurrentPathLeft->Color=0x00E9E9E9;

Form1->ListDevicesLeft->Color=0x00E9E9E9;

Form1->FileListLeft->Color=clGradientInactiveCaption;

Form1->LabelCurrentPathRight->Color=0x00C4C4C4;

Form1->ListDevicesRight->Color=0x00C4C4C4;

Form1->FileListRight->Color=0x00C4C4C4;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListDevicesRightEnter(TObject *Sender)

{

Form1->LabelCurrentPathRight->Color=0x00E9E9E9;

Form1->ListDevicesRight->Color=0x00E9E9E9;

Form1->FileListRight->Color=clGradientInactiveCaption;

Form1->LabelCurrentPathLeft->Color=0x00C4C4C4;

Form1->ListDevicesLeft->Color=0x00C4C4C4;

Form1->FileListLeft->Color=0x00C4C4C4;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bCreateDirClick(TObject *Sender)

{

FormDialogCreateDir->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bDeleteClick(TObject *Sender)

{

FormDialogDelete->Show();

FormDialogDelete->bRecycler->SetFocus();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bCopyClick(TObject *Sender)

{

CopyOrRemove(Panel,FO_COPY);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bRemoveClick(TObject *Sender)

{

CopyOrRemove(Panel,FO_MOVE);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FileListLeftKeyDown(TObject *Sender, WORD &Key,

      TShiftState Shift)

{

switch (Key)

{

case 13: DirSel=0;

          CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

          break;

case 116: CopyOrRemove(Panel,FO_COPY);

           break;

case 117: CopyOrRemove(Panel,FO_MOVE);

           break;

case 118: FormDialogCreateDir->Show();

           break;

case 119: FormDialogDelete->Show();

         FormDialogDelete->bRecycler->SetFocus();

           break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FileListRightKeyDown(TObject *Sender, WORD &Key,

      TShiftState Shift)

{

switch (Key)

{

case 13: DirSel=0;

          CurrentPathRight=HandlerOfOpen(RootDirRight, RIGHT, DirSel);

          break;

case 116: CopyOrRemove(Panel,FO_COPY);

           break;

case 117: CopyOrRemove(Panel,FO_MOVE);

           break;

case 118: FormDialogCreateDir->Show();

           break;

case 119: FormDialogDelete->Show();

           FormDialogDelete->bRecycler->SetFocus();

           break;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bCurrentRootDirLeftClick(TObject *Sender)

{

DirSel=2;

CurrentPathLeft=HandlerOfOpen(RootDirLeft, LEFT, DirSel);

Form1->FileListLeft->SetFocus();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bCurrentRootDirRightClick(TObject *Sender)

{

DirSel=2;

CurrentPathRight=HandlerOfOpen(RootDirRight, RIGHT, DirSel);

Form1->FileListRight->SetFocus();

}

//---------------------------------------------------------------------------


Unit2.h

//---------------------------------------------------------------------------

#ifndef Unit2H

#define Unit2H

//---------------------------------------------------------------------------

#endif

#define LEFT 1

#define RIGHT 0

#define FO_DELETER 5

extern int DirSel;

extern AnsiString RootDirLeft,RootDirRight;

extern AnsiString CurrentPathLeft,CurrentPathRight;

extern int Panel;

void CreateDirAttribSet();

AnsiString HandlerOfOpen(AnsiString RootDir, int Panel, int DirSel);

void CreateListOfDevices();

bool CreateFolder(int Panel);

void Deleting(int Panel, int Operation);

void CopyOrRemove(int Panel, int Operation);

Unit2.c

//---------------------------------------------------------------------------

#pragma hdrstop

#include "Unit1.h"

#include "Unit3.h"

#include

#include <_str.h>

#include

#include

#include

#include

#include

#include

//---------------------------------------------------------------------------

#pragma package(smart_init)

//---------------------------------------------------------------------------

intDirSel=0;// Признак совершения выбора в ListDevices

AnsiStringRootDirLeft,RootDirRight;// Текущая корневая директория

AnsiString CurrentPathLeft,CurrentPathRight;// Текущий путь

int Panel=LEFT;

struct _FileProperty//Структура вывода

{

char    FileAttrib[12];       // атрибуты файла

char    CreateTime[25];       // время создания файла

char    AccessTime[25];       // время доступа

char    WriteTime[25];        // время записи

char    FileSizeBy[21];       // размер файла в Б

char    FileSizeKb[18];       // размер файла в КБ

TCHAR   FileName[MAX_PATH];   // имя файла

TCHAR   AlterFileName[14];    // альтернативное имя файла

}FileProperty;

deque DequeFindLeft; //Очередь результатов поиска

deque DequeFindRight;

WIN32_FIND_DATAStructFind; //Структура результатов поиска

intColName=0, //Столбцы таблицы вывода

    ColSize=1,

    ColAttrib=2,

    ColCreTime=5,

    ColAccTime=4,

    ColWriTime=3;

//Множество атрибутов директории

set > DirAttribSet;

voidCreateDirAttribSet()//Создание множества атрибутов директории

{

DirAttribSet.insert(16);

DirAttribSet.insert(17);

DirAttribSet.insert(18);

DirAttribSet.insert(19);

DirAttribSet.insert(20);

DirAttribSet.insert(21);

DirAttribSet.insert(22);

DirAttribSet.insert(48);

DirAttribSet.insert(49);

DirAttribSet.insert(50);

DirAttribSet.insert(8208);

}

//---------------------------------------------------------------------------

//Создание списка доступных устройств

void CreateListOfDevices()

{

UINT DriveType;

char RootPath[4];

for(char i='A'; i<='Z'; i++)

{

strcpy(RootPath,"