Примечание | Файловый менеджер (получивший рабочее название 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) Реализацию заложенных в интерфейсе
возможностей: выбора устройства хранения
информации, просмотра содержимого
директорий, создания новых директорий,
операций с файлами и директориями
(копирования, перемещения и удаления).
Руководитель Юркевская Л.А.
Исполнитель
студент группы 04 ПОВТ-2 Портнов Д.И.
Срок защиты проекта «30» мая 2005г.
Аннотация Пояснительная записка
содержит 38 страниц, в том числе 3 рисунка, В данном проекте разработан файловый менеджер для операционных систем семейства 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
deque
WIN32_FIND_DATAStructFind; //Структура результатов поиска
intColName=0, //Столбцы таблицы вывода
ColSize=1,
ColAttrib=2,
ColCreTime=5,
ColAccTime=4,
ColWriTime=3;
//Множество атрибутов директории
set
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,"