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

Автор: Пользователь скрыл имя, 29 Апреля 2013 в 11:44, курсовая работа

Краткое описание

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

Оглавление

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ 3
1.1. Введение 3
1.2. Основания для разработки 3
1.3. Назначение разработки 3
1.4. Требования к программе или программному изделию 3
1.5. Условия эксплуатации 4
1.6. Требования к составу и параметрам технических средств 4
1.7. Требования к информационной и программной совместимости 4
1.8. Требования к программной документации 5
1.9. Стадии и этапы разработки 5
2. ИССЛЕДОВАТЕЛЬСКАЯ ЧАСТЬ 7
2.1. Постановка задачи 7
2.2. Общие сведения 7
2.3. Файловые системы 8
3. КОНСТРУКТОРСКАЯ ЧАСТЬ 12
3.1. Общие сведения 12
3.2. Руководство программиста 12
3.2.1. Структура программы 12
3.2.2. Структуры данных 13
3.2.3. Средства обмена данными 14
3.2.4. Реализация пользовательского интерфейса программы 15
3.2.5. Функции работы с файловой системой 20
4. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ 22
4.1. Обращение к программе 22
4.2. Входные данные 22
4.3. Выходные данные 22
4.4. Руководство пользователя 22
4.6.1. Назначение программы 22
4.6.2. Требования к аппаратной и программной средам 22
4.6.3. Выполнение программы 23
4.6.4. Сообщения пользователю 28
5.ЛИТЕРАТУРА 30
6.ПРИЛОЖЕНИЕ 31

Файлы: 1 файл

my_Записка.doc

— 1.21 Мб (Скачать)

BOOL FindClose(HANDLE hFindFile) – закрывает хэндл, который вернула функция FindFirstFile.

hFindFile – хэндл, который вернула функция FindFirstFile.

BOOL SetCurrentDirectory(LPCTSTR lpPathName) – функция устанавливает текущую папку.

lpPathName – путь к папке, которую необходимо сделать текущей.

DWORD_PTR SHGetFileInfo(LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO *psfi, UINT cbFileInfo, UINT uFlags) – возвращает информацию об элементе файловой системы, таком как файл, каталог или корневой катклог.

pszPath – путь к элементу;

dwFileAttributes – флаг или комбинация флагов;

*psfi – указатель, содержащий адрес структуры SHFILEINFO;

cbFileInfo – размер этой структуры в байтах;

uFlags – флаги, которые показывают спецификацию возвращаемой информации.

BOOL GetVolumeInformation(LPCTSTR lpRootPathName, LPTSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPTSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize) – возвращает информацию о носителях.

lpRootPathName – адрес корневого каталога;

lpVolumeNameBuffer – имя буфера;

nVolumeNameSize – длина имени буфера;

lpVolumeSerialNumber – серийный номер;

lpMaximumComponentLength – максимальная длина имени файла;

lpFileSystemFlags – опции файловой системы;

lpFileSystemNameBuffer – имя буфера файловой системы;

nFileSystemNameSize – длина имени буфера файловой системы;

BOOL CreateDirectory(LPCTSTR lpPathName) – создаёт папку с указанным адресом.

lpPathName – адрес папки.

int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp) – производит опереацию, которая указывается в передоваемой структуре и возвращает код ошибки если операция прошла неудачно, в противном случае возвращается 0.

lpFileOp – указатель на структуру операции LPSHFILEOPSTRUCT.

 

  1. Технологическая часть
    1. Обращение к программе

Для начала работы программы необходимо запиустить файл My_Comander.exe.

    1. Входные данные

Входными данными в программе  является информация о дисках компьютера и файлах на этих дисках, а также  сами файлы и папки.

    1. Выходные данные

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

4.6.2. Требования к аппаратной  и программной средам

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

  1. программа должна выполняться в одной из операционных систем      Windows 9x/ME/NT/2000/XP, для выполнения в Windows 95 необходимо установить MS Internet Explorer 4.0 или более поздний;
  2. программа может выполняться на IBM-PC совместимом компьютере с процессором не ниже 80586;
  3. для нормального функционирования программы необходим такой размер оперативной памяти, который необходим для работы операционной системы;
  4. для программы необходимо наличие 0,4 Мб свободного места на жестком диске;
  5. для работы с программой необходимо наличие клавиатуры и мыши;
  6. для отображения результатов работы программы необходимо наличие монитора;

 

    1. Руководство пользователя

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

    • Создание папок
    • Копирование и перемещение файлов и папок
    • Удаление файлов и папок
    • Переименование файлов и папок
    • Построение дерева
    • Переход по введённому адресу
    • Запуск файлов и открытие подпапок
    • Определение при загрузке подключённых дисков
    1. Запуск программы

Для начала работы программы необходимо запиустить файл My_Comander.exe. После чего загружается окпно приложения (рис.1).

Рис 1 Окно приложения

    1. Построение дерева каталогов

Для построения дерева каталогов  выбранного диска необходимо кликнуть кнопку «Дерево» на панели инструментов или соответствующий пункт меню, построение дерева предусмотрено для левой панели (рис.2). Выделив папку в дереве и нажав кнопку «Дерево» или пункт меню ещё раз осуществляется переход к этой папке.

Рис 2 Окно приложения с построенным дереврм каталогов

  1. Открытие папок и запуск файлов

Для открытия папки или  запуска файла достаточно кликнуть двойным щелчком на записи относящейся  к этой папке или файлу. При  этом если файл не исполняемый, а модержит информацию, он затускается той программой, которая предусмотрена для него опереационной системой. Открытие папки происходит в той же панели, и для перехода в родительскую папку необходимо кликнуть двойным щелчком на нервую в списке папку с именем «..» и значком «Up»  (рис.3).

Рис 3 Открытые папки в приложении

  1. Копирование файлов и папок

Для копирования необходимо выделить файл или папку в одной из панелей, которая должна быть списком, и нажать кнопку «Копировать» на панели инструментов или соответствующий пункт меню.

  1. Перемещение файлов и папок

Для перемещения необходимо выделить файл или папку в одной  из панелей, которая должна быть списком, и нажать кнопку «Переместить» на панели инструментов или соответствующий пункт меню.

  1. Удаление файлов  и папок

Для удаления необходимо выделить файл или папку в одной  из панелей, которая должна быть списком, и нажать кнопку «Удалить» на панели инструментов или соответствующий  пункт меню.

  1. Переименование файлов и папок

Для переименования необходимо выделить файл или папку в одной из панелей, которая должна быть списком, и нажать кнопку «Переименовать» на панели инструментов или соответствующий пункт меню, также можно кликнуть ещё раз по записи. При этом название объекта выделится и ставится курсор для ввода имени, после ввода нового имени достаточно нажать Enter (рис.4).

Рис 4 Редактирование имени папки

  1. Обновление инфирмации о содержимом

Для обновления информации о файлах и папках необходимо , и  нажать кнопку «Обновить» на панели инструментов или соответствующий пункт меню.

  1. Смена дисков

Каждой панели соответствует  свой списой дисков расположенный над  ним. В нём отображается имя текущего диска этой панели. При клике на список он разворачивается и можно выбрать нужный диск (рис.5).

Рис 5 Выбор диска

  1. Ввод адреса для перехода

Для перехода к папке  по адресу имеется строка адреса. При  переходах между папками там  отображается адрес текущей папки  текущей панели. Для перехода к  нужной папке необходимо выбрать нужный диск, поставить курсор в строку адреса, ввести путь и нажать Enter. Переход осуществляется в левой панели.

  1. Вывод информации о программе

Для просмотра инфорации  о программе необходимо кликнуть пункт меню «About» (рис. 6).

Рис 6 Окно о программе

4.6.4. Сообщения пользователю

  1. Если при создании папки возникает ошибка и создать папку неудаётся, выводится сообщение об ошибке (рис. 7).

Рис 7 Ошибка при создании папки

  1. Если при открытии папки возникает ошибка, то выводится сообщение об ошибке (рис.8).

Рис 8 Ошибка при открытии папки

  1. Если при обращении к диску в устройстве нет диска, или носитель не готов по другим причинам выводится сообщение об ошибке (рис. 9).

Рис 9 Ошибка при обращении к диску

  1. Если при переименовании задано некорректное имя выводится сообщение об ошибке (рис. 10).

Рис 10 ошибка при смене имени

  1. Также во время работы программе в строке состояния отображается местное время. И при выполнении операций работы с каталогами в строке состояния выводится сообщение «Scaning directory strycture…», по завершении операции выводится сообщение «Ready». При операциях с файлами и папками выводятся стандартные диалоговые окона операционной системы.

 

5.Литература

    1. Верма Р.Д. Справочник по функциям Win32 API. М.: Горячая линия-Телеком, 2002.
    2. Ганеев Р.М. Проектирование интерфейса пользователя средствами Win32 API. М.:Горячая линия-Телеком, 2001.
    3. Дейтел Х., Дейтел П. Как программировать на С++. – М.: ЗАО «Издательство БИНОМ», 2003. – 1152с.
    4. Румянцев П.В. Азбука программирования в Win32 API М.:Горячая линия-Телеком, 2001.
    5. Microsoft Developer Network:[Электронный ресурс]. Режим доступа: http://msdn.microsoft.com.

 

 

6.Приложение

#include "stdafx.h"

#include "resource.h"

 

#pragma comment(lib, "comctl32.lib")

 

HWND mainhwnd;

HWND hwndStatus;

HWND hwndListView1;

HWND hwndListView2;

LV_COLUMN lvc;

LV_ITEM lvi;

HWND hwndToolBar;

HWND hwndTreeView;

HWND hwndComboBox1;

HWND hwndComboBox2;

HWND hwndEdit;

HINSTANCE hInst;

 

WNDPROC hEditProc;

 

bool MyTree=0;

bool first=1;

char CurentDiskName[3];

char CurrDir1[1024];

char CurrDir2[1024];

int index1;

int index2;

int a,b,c;

 

LPNMHDR   pNotifMessageHeader; //указатель на структуру уведомляющего сообщения

RECT   statusRect;    //размер строки состояния

UINT   wStatID;   //идентификатор окна состояния

LPNMTREEVIEW ptrNotifMessageTreeView; //указатель на уведомляющее сообщение от узла TreeView

int ComboInd;

 

HMENU hMenu, hMenupopup;

const IDM_COPY=100;

const IDM_RENAME=101;

const IDM_MKDIR=102;

const IDM_DELETE=103;

const IDM_ABOUT=104;

const IDM_REFRESH=105;

const IDM_MOVE=106;

 

const ID_TIMER1=1000;

const ID_SB=1001;

const ID_LISTVIEW1=1002;

const ID_LISTVIEW2=1003;

const ID_TREEVIEW=1004;

const ID_TOOLBAR=1005;

const ID_COMBOBOX1=1006;

const ID_COMBOBOX2=1007;

const ID_EDIT=1009;

 

 

 

HIMAGELIST hilLarge;

HIMAGELIST himlSmall1;

HIMAGELIST himlSmall2;

 

 

void OnResize();

void RefreshComboInf(HWND hwndCombo);

void DiskBrows();

void CreateFoldersOnDisk(HWND hwnd);

LPSTR FindFullPath (LPSTR strDrive/*[out]*/,  HWND hwndTreeView, HTREEITEM htreeItem);

bool AddChildren (HWND hwndTreeView, HTREEITEM hTreeItem, LPCSTR ParentDir );

bool DelChildren (HWND hwndTreeView, HTREEITEM hTreeItem);

bool CollapseChildren(HWND hwndTreeView, HTREEITEM hTreeItem);

 

void FillListView(HWND hwndlv,LPCSTR ParentDir, HIMAGELIST himlSmall);

unsigned long GetFolderSize(LPCSTR ParentDir);

void OnDblClick(HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall);

void CreateNewFolder(HWND hwndlv, LPCSTR CurrDir, HIMAGELIST himlSmall);

void DeleteFile(HWND hwndlv, LPCSTR CurrDir);

void Renamefile(HWND hwndlv);

 

void CopyFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrD1, LPCSTR CurrD2, HIMAGELIST himlSmall);

void CutFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrD1, LPCSTR CurrD2, HIMAGELIST himlSmall);

void PasteFile(HWND hwndlv1, HWND hwndlv2, LPCSTR CurrDir,

   HIMAGELIST himlSmall, LPCSTR csFileNameCopy, LPCSTR csNF, bool cut, int index);

 

LRESULT EditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

 

void GoTo(HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall);

void Activate();

void DisActivate();

 

LRESULT CALLBACK WindowFunc(HWND , UINT, WPARAM, LPARAM);

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);

 

 

typedef struct _FLAGDISK

{

DWORD dwFlag;

char* cDisk;

} FLAGDISK;

 

FLAGDISK FlagDisk[26] =

{

0x1,  "A:\\",

0x2,  "B:\\",

0x4,  "C:\\",

0x8,  "D:\\",

0x10,  "E:\\",

0x20,  "F:\\",

0x40,  "G:\\",

0x80,  "H:\\",

0x100,  "I:\\",

0x200,  "J:\\",

0x400,  "K:\\",

0x800,  "L:\\",

0x1000,  "M:\\",

0x2000,  "N:\\",

0x4000,  "O:\\",

0x8000,  "P:\\",

0x10000, "Q:\\",

0x20000, "R:\\",

0x40000, "S:\\",

0x80000, "T:\\",

0x100000, "U:\\",

0x200000, "V:\\",

0x400000, "W:\\",

0x800000, "X:\\",

0x1000000, "Y:\\",

0x2000000, "Z:\\"

};

 

BOOL IsDiskInDrive ( LPTSTR lpszDrive );

 

char szWinName[] = "MyCom"; // имя класса окна

 

int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)

{

    HWND hwnd;

    MSG  msg;

    WNDCLASSEX wcl;

 

HICON hIcon; //for toolbar

    TBBUTTON btns[9];

 

hInst = hThisInst;

 

InitCommonControls();

 

    //определение класса окна

 

    wcl.hInstance = hThisInst;          //работа с данным экземпляром

    wcl.lpszClassName = szWinName;      //имя класса окна

    wcl.lpfnWndProc = WindowFunc;       // оконная функция

    wcl.style = CS_HREDRAW|CS_VREDRAW;  // стиль

 

    wcl.cbSize = sizeof(WNDCLASSEX);    //установка размера

 

    wcl.hIcon = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_G));  //большие иконки

    wcl.hIconSm = LoadIcon(hThisInst, MAKEINTRESOURCE(IDI_G));    //маленькие иконки

 

    wcl.hCursor = LoadCursor(NULL, IDC_ARROW);    //стиль курсора

    wcl.lpszMenuName = NULL;                      //нет меню

 

    wcl.cbClsExtra = 0;                           //дополнительной

    wcl.cbWndExtra = 0;                           //информации нет

                                                             

    wcl.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1);  //фон окна

 

                                                               //регистрация окна

    if (!RegisterClassEx(&wcl)) return 0;

 

                                      //класс окна зарегистрирован, создаем окно

    hwnd = CreateWindow(

      szWinName,

      "My_Comander",

      WS_OVERLAPPEDWINDOW,

      100,

      100,

      800,

      600,

      HWND_DESKTOP,

      NULL,

      hThisInst,

      NULL

    );

 

if (!hwnd)

{

MessageBox(NULL, "Cannot create window", "Error", MB_ICONEXCLAMATION  | MB_OK);

Информация о работе Файловый менеджер