Файловый менеджер
МОСКОВСКИЙ ОРДЕНА ЛЕНИНА, ОРДЕНА ОКТЯБРЬСКОЙРЕВОЛЮЦИИ И ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. Н.Э.БАУМАНА
Калужский филиал
Факультет ″Фундаментальных Наук″
Кафедра ″Программного Обеспечения ЭВМ, Информационных Технологий и Прикладной Математики″
РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К КУРСОВОМУ ПРОЕКТУ
ПО КУРСУ «СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ»
Тема:
«Файловый менеджер»
Студент
Жиров Д.Е. (________)
Группа
Руководитель работы ________________________
Калуга, 2005г.
СОДЕРЖАНИЕ
- ТЕХНИЧЕСКОЕ ЗАДАНИЕ
- Введение
Разрабатываемый программный продукт My_Comander должен иметь возможность работы с имеющимися дисками и их файловыми системами, а также наглядно отображать имеющиеся на дисках файлы и папки, как в виде дерева, так и виде таблицы. Действия должны осуществляться как с помощью меню, так и с помощью пиктограмм панели управления. Программа предназначена для людей, работающих с данными на дисках для их быстрого получения.
- Основания для разработки
Разработка данного проекта ведётся на основании курсовой работы по курсу «Операционные системы» на тему «Файловый менеджер».
- Назначение разработки
Данный программный продукт разрабатывается для того, чтобы работать с имеющимися дисками и их файловыми системами, осуществлять такие действия как копирование, перемещение, удаление файлов и папок, создание новых папок, а также наглядно отображать имеющиеся на дисках файлы и папки как в виде дерева, так и виде таблицы. Причём необходимо предусмотреть переключение между деревом и таблицей. Также необходимо дать пользователю возможность вводить путь к интересующей его папке. И необходимо отображать текущую папку с полным путём к ней. Необходимо предусмотреть возможность выбора диска из имеющихся в компьютере. Действия должны осуществляться как с помощью меню, так и с помощью пиктограмм панели управления.
- Требования к программе или программному изделию
Программа должна безотказно работать на компьютере после установки всех компонентов и элементов. Программа должна работать в операционной системе семейства Windows начиная с 95 версии. Надёжная работа продукта должна обеспечиваться использованием лицензионного программного обеспечения.
- Условия эксплуатации
В результате программа
должна быть понятна неопытному пользователю
и для работы с ней не должно
требоваться
- Требования к составу и параметрам технических средств
При работе с программой пользователь должен иметь возможность использовать такие средства управления как клавиатура, мышь или ей аналогичные. Также необходимо предусмотреть запуск программы и комфортную работу с ней при использовании как крупных (1280х1024), так и мелких (800х600) разрешений монитора. В результате программа должна быть совместима с операционными системами семейства Windows, начиная с Windows 95, а также иметь в комплекте поставки все используемые библиотеки и классы, которые однако не помешают нормальному функционированию операционной системы и других программ. Установленная программа должна занимать на диске не более 5Mb и быть не слишком требовательной к аппаратным ресурсам для возможности запуска на маломощных компьютерах.
- Требования к информационной и программной совместимости
Для проектирования программы необходимо использовать такие среды проектирования как MS-Visio и MS-Word. Для реализации данного программного продукта необходимо использовать визуальную среду разработки Microsoft Visual C++.
- Требования к программной докум
ентации
Данный программный продукт должен иметь следующий состав программной документации:
- титульный лист;
- оглавление;
- техническое задание на курсовой проект;
- исследовательская часть;
- конструкторская часть;
- технологическая часть.
Графическая часть должна
содержать следующие листы
- структурная блок – схема приложения 1 л;
- блок-схемы модулей приложения 0,5 л;
- граф-диалога работы с системой или 0,5 л;
- интерфейс пользователя или графические результаты работы 1л.
- Стадии и этапы разработки
Студент должен выполнить следующие объемы работ:
20% объема работ |
¾ |
Утверждение темы. Разработка плана. |
40% объема работ |
¾ |
Обзор литературы и способов решения, обоснование выбора способа решения, аппаратной и программной платформ, среды разработки. |
60% объема работ |
¾ |
Разработка алгоритма работы приложения, разработка алгоритмов модулей, реализация их в выбранной среде разработки. |
80% объема работ |
¾ |
Формулирование требований к аппаратной и программной платформам, руководство по установке и администрированию приложения, руководство пользователя. |
100% объема работ |
¾ |
Окончательное оформление чертежей и расчетно-пояснительной записки. Подготовка доклада. |
Разработчиком данного проекта является Жиров Д. Е.
Проектирование данного программного продукта должно быть закончено и принято не позднее, чем 15 мая 2005 года.
- Исследовательская часть
- Постановка задачи
Разработать программный продукт, который должен иметь возможность работы с имеющимися дисками и их файловыми системами, а также наглядно отображать имеющиеся на дисках файлы и папки, как в виде дерева, так и виде таблицы. Программа должна позволять копировать, перемещать, удалять, переименовывать файлы и папки, создавать новые папки. Действия должны осуществляться как с помощью меню, так и с помощью пиктограмм панели управления. Также необходимо предусмотреть возможность перехода по введённому адресу. Среда проектирования - Microsoft Visual C++ с использованием средств Win32 API.
- Общие сведения
Язык С++ - универсальный язык программирования с богатым набором операторов и компактным способом записи выражений. Он обладает высокой гибкостью и поэтому используется при написании системных и прикладных программ. С помощью Visual С++ можно создавать приложения для любой области современных компьютерных технологий: бизнес-приложения, игры, мультимедиа, базы данных. При этом приложения могут быть как простыми, так и очень сложными, в зависимости от поставленной задачи. API (application programming interface — интерфейс прикладного программирования) – набор подпрограмм, используемых приложениями для запросов и выполнения служб нижнего уровня операционной системой компьютера. Эти подпрограммы обычно выполняют задачи обслуживания, такие как управление файлами и отображение данных.
Операционная система Windows пришла на смену DOS. Главная идея Windows – графический пользовательский интерфейс. Также принципиально важным моменетом этой операционной системы является многозадачность. Благодаря этой способности допускается одновременное выполнение нескольких процессов и появляется возможность обемна данными между работающими процессами. Важно также и то, что Windows использует расширенную оперативную память. На сегодняшний день Windows используют около 85% пользователей персональных компьютеров, оно является самым распространённым семейством операционных систем.
В Windows работа с окнами в основном производится при помощи мыши. Все опрации в высокой степени унифицированы, все программные средства имеют очень схожие интерфейсы и принципы управления, что значительно ускоряет освоение новых программ.
Работать с Windows крайне просто. Первое, что вы видите — это большая область экрана, которая называется рабочим столом, и узкая полоса под ним, называемая панелью задач. Все операции с компьютером выполняются в рамках, которые называются окнами. Одновременно может быть открыто любое число окон. Можно изменять их размер, перемещать их и любым способом изменять их порядок.
Каждый рабочий элемент — или файл —
может храниться в папке.
Интерфейс Windows упрощает сохранение файлов
в наиболее подходящих местах.
- Файловые системы
При разбиении диска на области, называемые разделами, в каждой из них может быть создана файловая система, соответствующая определенной операционной системе. Сегодня в работе операционных систем чаще других используется три файловые системы.
- FAT (File Allocation Table — таблица размещения файлов). Это стандартная файловая система для DOS, Windows 9х и Windows NT. В разделах FAT под DOS допустимая длина имен файлов— 11 символов (8 символов собственно имени и 3 символа расширения), а объем тома (логического диска) — до 2 Гбайт. Под Windows 9х и Windows NT 4.0 и выше допустимая длина имен файлов— 255 символов.
- FAT32 (File Allocation Table, 32-bit — 32-разрядная таблица размещения файлов). Используется с Windows 95 OSR2 (OEM Service Release 2), Windows 98 и Windows 2000. В таблицах FAT 32 ячейкам размещения соответствуют 32-разрядные числа. При такой файловой структуре объем тома (логического диска) может достигать 2 Тбайт (2 048 Гбайт).
- NTFS (Windows NT File System — файловая система Windows NT). Доступна только в операционной системе Windows NT/2000. Длина имен файлов может достигать 256 символов, а размер раздела (теоретически) — 16 Эбайт (16*1018 байт). NTFS обеспечивает дополнительные возможности, не предоставляемые другими файловыми системами, например средства безопасности.
Большинство существующих на сегодняшний день файловых систем построены на основе таблицы размещения файлов (File Allocation Table — FAT), которая содержит дорожки данных в каждом кластере на диске. Существует несколько типов файловой системы FAT — FAT 12, FAT 16 и FAT 32. Они отличаются количеством цифр, используемых в таблице размещения файлов. Другими словами, в FAT 32 используется 32-разрядное число для хранения дорожки данных в каждом кластере, в FAT 16 — 16-разрядное число и т.д. В настоящее время существуют следующие типы файловой системы FAT:
- FAT 12, используемая в разделах емкостью не более 16 Мбайт (например, дискета);
- FAT 16, используемая в разделах емкостью от 16 Мбайт до 2 Гбайт;
- FAT 32, используемая (необязательно) в разделах емкостью от 512 Мбайт до 2 Тбайт.
Файловые системы FAT 12 и FAT 16 изначально применяются в DOS и Windows и поддерживаются практически всеми известными на сегодняшний день операционными системами. Большинство персональных компьютеров поставляется с жесткими дисками, на которых установлена одна из файловых систем FAT. Файловая система FAT 32 поддерживается операционной системой Windows 95B и более поздними версиями, а также Windows 2000, которая также поддерживает файловую систему NTFS. Некоторые операционные системы имеют собственную файловую систему. Например, Windows NT и Windows 2000 поддерживают файловую систему NT File System (NTFS); OS/2 поставляется с собственной файловой системой High Performance File System (HPFS).
Когда разрабатывалась FAT, жесткие диски размером 2 Гбайт можно было встретить разве что в научно-фантастических романах. В настоящее время практически все системы нижнего уровня оснащаются жестким диском не менее 2 Гбайт. При использовании стандартной FAT вы можете создать раздел размером не более 2 Гбайт.
Для устранения этого ограничения Microsoft предложила новую файловую систему с расширенными возможностями, называемую FAT 32. Эта файловая система работает как стандартная FAT, но имеет отличия в организации хранении файлов. Система FAT 32 была впервые реализована в Windows 95 OEM Service Release 2 (OSR2). Она встроена также и в Windows 98/Me, а также в Windows 2000.
Файловая система NTFS применяется в операционной системе Windows NT. Несмотря на то, что Windows NT может использовать разделы с FAT, файловая система NTFS обеспечивает ряд преимуществ: большие размеры файлов и разделов, дополнительные атрибуты файлов и расширенные средства безопасности. При разработке операционной системы Windows NT не существовало проблем обеспечения обратной совместимости, поэтому файловая система обладает особыми свойствами и поддерживается только Windows NT.
Все операционные системы Windows (кроме Windows NT/2000) основаны на DOS, поэтому внутри системы существует часть кода DOS. В Windows NT/2000 DOS-программы работают в режиме эмуляции DOS. При загрузке другой операционной системы раздел с NTFS недоступен.
В файловой системе имя файла может содержать до 255 символов, включая пробелы, точки и другие символы, кроме * ? \ / ; < > |. Поскольку NTFS — 64-разрядная файловая система, размер файла и раздела может быть просто огромным — 264 байт, или 17 179 869 184 Тбайт!
- Конструкторская часть
- Общие сведения
Данный курсовой проект представляет собой программу, созданную в среде Visual C++ 6.0, с полным её описанием. Цель проекта – создание файлового менеджера.
- Руководство программиста
3.2.1. Структура программы
Программа состоит из следующих модульных частей:
- Main_cpp.cpp – главный модуль программы. Содержит переменные и основной код приложения;
- stdafx.h – заголовочный файл, содержащий обращения к заголовочным файлам С++ и Windows;
- My_Comander.rc – файл, содержащий имена иконок, используемых в программе, а также строки выводимые в качестве всплывающих подсказок;
- Arr.ico – графический файл изображения стрелки перехода на уровень вверх;
- CGFolder.ico - графический файл изображения закрытой зелёной папки;
- CYFolder.ico - графический файл изображения закрытой желтой папки;
- OYFolder.ico - графический файл изображения открытой желтой папки;
- Tree.ico - графический файл изображения дерева;
- GLitera.ico - графический файл изображения иконки приложения;
- Copy.ico - графический файл изображения копирования файла;
- New.ico - графический файл изображения новой папки;
- Delete.ico - графический файл изображения удаления файла;
- Move.ico - графический файл изображения перемещения файла;
- Refresh.ico - графический файл изображения обновления;
- Rename.ico - графический файл изображения переименования файла.
3.2.2. Структуры данных
При разработке программы помимо основных типов данных использовались такие типы как:
HWND – данные этого типа являются указателями окна;
HIMAGELIST – данные этого типа являются указателями на списки изображений;
TBBUTTON – представитель этой структуры хранит информацию о кнопке панели инструментов;
HINSTANCE – данные этого типа являются указателями на данный экземпляр;
HICON – данные этого типа являются указателями на иконку;
RECT – переменные этого типа
хранят координаты верхнего
SHFILEINFO – переменная данного типа хранит информацию о файле необходимую операционной системе;
SYSTEMTIME – переменная данного типа хранит информацию в формате системного времени;
SHFILEOPSTRUCT – переменная данного типа хранит информацию об операции с файлом которую должна выполнить операционная система;
WIN32_FIND_DATA – представители этой структуры содержат информацию о найденных файлах.
При этом для окна ListView использовались:
LV_COLUMN – данные этого
типа являются колонками
LV_ITEM – данные этого типа являются строками элемента ListView.
Для окна TreeView использовались:
LPNMTREEVIEW – переменная данного типа хранит указатель на уведомляющее сообщение от узла TreeView;
TV_INSERTSTRUCT – структура элемента TreeView;
HTREEITEM– данные этого типа являются указателями на элемент TreeView;
TV_ITEM – данные этого типа являются элементами TreeView.
3.2.3. Средства обмена данными
В программе использованы следующие элементы ввода-вывода данных:
List View позволяет отображать списки в нескольких видах:
- детальный многоколоночный отчет с возможностью изменения ширины столбцов и сортировки по столбцам;
- окно с пиктограммами стандартного размера, аналогичного окну раскрытой папки;
- окно с пиктограммами уменьшенного размера;
- простой список с пиктограммами.
TreeView позволяет просматривать список объектов, имеющих иерархическую структуру в виде дерева. Такую структуру имеют файлы и папки на диске.
Edit позволяет вводить и выводить текстовые данные. Он представляет собой текстовое поле состоящее из одной строки.
Элемент управления ComboBox (поле со списком) позволяет выбрать элемент из списка, либо внести данные вручную. Он сочетает в себе возможности ListBox и Edit. В нём отображается только один элемент списка. У него отсутствует возможность выделения нескольких элементов, но он позволяет вводить значения как в TextBox.
3.2.4. Реализация пользовательского интерфейса программы
Функция int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode).
Данная функция создана для выполнения основных задач:
- регистрация оконного класса, создание окна программы, отображение его на экране, организация цикла обработки сообщений;
- создание меню;
- создание панели инструментов;
- создание элементов управления ListView;
- создание элемента управления TreeView;
- создание элементов управления ComboBox;
- создание элемента управления Edit.
Функция LRESULT CALLBACK WindowFunc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam).
Это оконная функция, обрабатывающая сообщения основного окна программы. Осуществляется обработка следующих сообщений:
- WM_CREATE
- производится установка таймера;
- WM_SIZE
- перерисовка строки состояния;
- перерисовка панели инструментов;
- изменение размеров всех элементов управления, вызовом функции OnResize();
- WM_COMMAND – в зависимости от выбора пункта меню производятся следующие действия:
- IDM_ABOUT – осуществляется вывод сообщения о программе.
- IDI_TREE – осуществляется построение дерева для выбранного диска, а при повторном нажатии переход к выбранной папке.
- IDI_NEW или IDM_MKDIR – происходит создание новой папки.
- IDI_DELETE или IDM_DELETE – происходит удаление выбранной папки или файла.
- IDI_RENAME или IDM_RENAME – происходит переименование выбранной папки или файла.
- IDI_COPY или IDM_COPY – происходит копирование выбранной папки или файла.
- IDI_MOVE или IDM_MOVE – происходит перемещение выбранной папки или файла.
- IDI_REFRESH или IDM_REFRESH – происходит обновление информации в таблицах.
Также если сообщение пришло от одного из элементов управления:
- ComboBox1 – происходит проверка наличия диска в системе, и если диск присутствует, то осуществляется переход на этот диск. Если выбрано дерево, то информация о диске представляется в виде дерева, если выбрана таблица – формируется таблица.
- ComboBox2 – происходит проверка наличия диска в системе, и если диск присутствует, то осуществляется переход на этот диск. Информация о диске представляется в виде таблицы.
- WM_NOTIFY – сообщение об изменении состояния элемента:
TreeView:
- TTN_NEEDTEXT – курсор подведен к панели инструментов и выводится подсказка для кнопки;
- TVN_ITEMEXPANDING – при значении действия TVE_EXPAND происходит разворачивание поддерева кликнутого элемента, при значении TVE_COLLAPSE происходит сворачивание поддерева кликнутого элемента и всех вложенных элементов;
- TVN_SELCHANGED – при смене выбранного элемента дерева происходит занесение адреса выбранной папки в строку;
ListView:
- NM_DBLCLK – при двойном щелчке на элемент таблицы происходит вызов функции OnDblClick();
- NM_SETFOCUS – при палучении фокуса окном становятся доступны кнопки панели инструментов работы с файлами и соответствующие пункты меню и в строку адреса помещается путь текущей папки;
- LVN_ITEMCHANGED – при выборе элемента становятся доступны кнопки панели инструментов работы с файлами и соответствующие пункты меню;
- NM_KILLFOCUS – при удалении фокуса с окна становятся не доступны кнопки панели инструментов работы с файлами и соответствующие пункты меню;
- LVN_COLUMNCLICK – при клике на заголовке столбца таблицы происходит сортировка элементов по этому столбцу;
- LVN_ENDLABELEDIT – при окончании изменения имени файла или папки происходит проверка правильности ввода имени и замена на него;
- WM_TIMER – производится получение системных значений даты и времени и вывод их на строку состояния;
- WM_DESTROY – производится уничтожение главного окна программы.
Функция LRESULT EditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
при вводе пути с строку адреса и нажатии
клавиши Enter вызывает функцию GoTo (hwndListView1,CurrDir1,
Функция void OnResize () осуществляет пересчёт разреров и координат элементов упривления при изменении размеров окна приложения;
Функция void DiskBrows () просматривает диски подключённые к компьютеру и заносит их имена в ComboBox-ы, которые в дальнейшем позволят переключаться между дисками;
Функция void CreateFoldersOnDisk (HWND hwnd) формирует дерево каталогов на выбранном диске, который находится в корне этого дерева;
Функция LPSTR FindFullPath (LPSTR strDrive, 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) производит заполнение ListView информацией о файлах содержащихся в текущей папке, ставит соответствующую иконку, выводит дату создания и размер файлов;
Функция unsigned long GetFolderSize(LPCSTR ParentDir) рекурсивно подсчитывает размер папки и возвращает его если размер папки меньше 1450000 байт, в противном случае возвращает 9999999.
Функция void OnDblClick (HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall) вызывается при двойном клике на элементе таблицы. Если кликнут файл происходит запуск файла, если папка происходит открытие папки, если «вверх» происходит переход в родительскую папку;
Функция int CALLBACK CompareFunc (LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) роизводит сортировку элементов таблицы по выбранному параметру;
Функция BOOL IsDiskInDrive ( LPTSTR lpszDrive ) проверяет наличие диска в устройстве;
Функуия void RefreshComboInf(HWND hwndCombo) определяет какой элемент ComboBox-а выбран;
Функция 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) копирует выбранный файл или папку из таблицы и вызывает функцию PasteFile;
Функция void CutFile (HWND hwndlv1, HWND hwndlv2, LPCSTR CurrD1, LPCSTR CurrD2, HIMAGELIST himlSmall) вырезает выбранный файл или папку из таблицы и вызывает функцию PasteFile;
Функция void PasteFile (HWND hwndlv1, HWND hwndlv2, LPCSTR CurrDir,
HIMAGELIST himlSmall,LPCSTR csFileNameCopy,LPCSTR csNF, bool cut, int index) вставляет файл во вторую таблицу;
Функция void GoTo (HWND hwndlv, char* CurrentDirectory, HIMAGELIST himlSmall) осуществляет переход по введённому адресу если он существует, в противном случае остается текущая папка;
Функция void Activate () активизирует кнопки панели инструментов и пункты меню;
Функция void DisActivate () делает неактивними кнопки панели инструментов и пункты меню.
3.2.5. Функции работы с файловой системой
DWORD GetLogicalDrives(VOID) – возвращает информацию о логических дисках компьютера.
HANDLE FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData) – ищет файл в указанной папке и формирует структуру, содержащую информауию о найденных подпапках и файлах.
lpFileName – имя папки, в которой следует произвести поиск;
lpFindFileData – указатель на структуру WIN32_FILE_DATA, в которую занесётся информация о найденных подпапках и файлах.
BOOL FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData) – продолжает поиск файлов и папок.
hFindFile – хэндл, который вернула функция FindFirstFile;
lpFindFileData – указатель на структуру WIN32_FILE_DATA, в которой хранится информация о найденных подпапках и файлах.