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



МОСКОВСКИЙ  ОРДЕНА ЛЕНИНА, ОРДЕНА ОКТЯБРЬСКОЙРЕВОЛЮЦИИ И ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. Н.Э.БАУМАНА

Калужский филиал

 

 

Факультет ″Фундаментальных Наук″

 

Кафедра ″Программного  Обеспечения ЭВМ, Информационных Технологий и Прикладной Математики″

 

 

 

 

 

 

 

РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА  К КУРСОВОМУ ПРОЕКТУ
 ПО КУРСУ «СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ»

 

 

Тема:

 

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

 

 

 

Студент                         Жиров Д.Е.  (________)                                                                                               

Группа                              ИТД- 62       

Руководитель работы   ________________________

 

 

 

 

 

 

 

 

 

 

 

 

Калуга, 2005г.

 

 

СОДЕРЖАНИЕ

 

 

 

  1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
    1. Введение

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

    1. Основания для разработки

Разработка данного  проекта ведётся на основании  курсовой работы по курсу «Операционные системы» на тему «Файловый менеджер».

    1. Назначение разработки

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

    1. Требования к программе или программному изделию

Программа должна безотказно работать на компьютере после установки всех компонентов и элементов. Программа должна работать в операционной системе семейства Windows начиная с 95 версии. Надёжная работа продукта должна обеспечиваться использованием лицензионного программного обеспечения.

    1. Условия эксплуатации

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

    1. Требования к составу и параметрам технических средств

При работе с программой пользователь должен иметь возможность  использовать такие средства управления как клавиатура, мышь или ей аналогичные. Также необходимо предусмотреть запуск программы и комфортную работу с ней при использовании как крупных (1280х1024), так и мелких (800х600) разрешений монитора. В результате программа должна быть совместима с операционными системами семейства Windows, начиная с Windows 95, а также иметь в комплекте поставки все используемые библиотеки и классы, которые однако не помешают нормальному функционированию операционной системы и других программ. Установленная программа должна  занимать на диске не более 5Mb и быть не слишком требовательной к аппаратным ресурсам для возможности запуска на маломощных компьютерах.

    1. Требования к информационной и программной совместимости

Для проектирования программы  необходимо использовать такие среды  проектирования как MS-Visio и MS-Word. Для реализации данного программного продукта необходимо использовать визуальную среду разработки Microsoft Visual C++.

 

    1. Требования к программной документации

Данный программный  продукт должен иметь следующий  состав программной документации:

    • титульный лист;
    • оглавление;
    • техническое задание на курсовой проект;
    • исследовательская часть;
    • конструкторская часть;
    • технологическая часть.

Графическая часть должна содержать следующие листы формата  А1:

    • структурная блок – схема приложения 1 л;
    • блок-схемы модулей приложения 0,5 л;
    • граф-диалога работы с системой или 0,5 л;
    • интерфейс пользователя или графические результаты работы 1л.
    1. Стадии и этапы разработки

Студент должен выполнить следующие  объемы работ:

20% объема работ

 ¾

Утверждение темы. Разработка плана.

40% объема работ

 ¾

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

60% объема работ

 ¾

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

80% объема работ

 ¾

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

100% объема работ

 ¾

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


 

Разработчиком данного  проекта является Жиров Д. Е.

Проектирование данного  программного продукта должно быть закончено  и принято не позднее, чем 15 мая 2005 года.

 

 

 

  1. Исследовательская часть
    1. Постановка задачи

Разработать программный  продукт, который должен иметь возможность  работы с имеющимися дисками и  их файловыми системами, а также  наглядно отображать имеющиеся на дисках файлы и папки, как в виде дерева, так и виде таблицы. Программа должна позволять копировать, перемещать, удалять, переименовывать файлы и папки, создавать новые папки. Действия должны осуществляться как с помощью меню, так и с помощью пиктограмм панели управления. Также необходимо предусмотреть возможность перехода по введённому адресу. Среда проектирования - Microsoft Visual C++ с использованием средств Win32 API.

    1. Общие сведения

Язык С++ - универсальный  язык программирования с богатым  набором операторов и компактным способом записи выражений. Он обладает высокой гибкостью и поэтому используется при написании системных и прикладных программ. С помощью Visual С++ можно создавать приложения для любой области современных компьютерных технологий: бизнес-приложения, игры, мультимедиа, базы данных. При этом приложения могут быть как простыми, так и очень сложными, в зависимости от поставленной задачи. API (application programming interface — интерфейс прикладного программирования) – набор подпрограмм, используемых приложениями для запросов и выполнения служб нижнего уровня операционной системой компьютера. Эти подпрограммы обычно выполняют задачи обслуживания, такие как управление файлами и отображение данных.

Операционная система Windows пришла на смену DOS. Главная идея Windows – графический пользовательский интерфейс. Также принципиально важным моменетом этой операционной системы является многозадачность. Благодаря этой способности допускается одновременное выполнение нескольких процессов и появляется возможность обемна данными между работающими процессами. Важно также и то, что Windows использует расширенную оперативную память. На сегодняшний день Windows используют около 85% пользователей персональных компьютеров, оно является самым распространённым семейством операционных систем.

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

Работать с Windows крайне просто. Первое, что вы видите — это большая область экрана, которая называется рабочим столом, и узкая полоса под ним, называемая панелью задач. Все операции с компьютером выполняются в рамках, которые называются окнами. Одновременно может быть открыто любое число окон. Можно изменять их размер, перемещать их и любым способом изменять их порядок.

Каждый рабочий элемент — или файл — может храниться в папке. 
Интерфейс Windows упрощает сохранение файлов в наиболее подходящих местах.

    1. Файловые системы

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

    • 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 Тбайт!

 

 

 

 

 

  1. Конструкторская часть
    1. Общие сведения

Данный курсовой проект представляет собой программу, созданную  в среде Visual C++ 6.0, с полным её описанием. Цель проекта – создание файлового менеджера.

    1. Руководство программиста

3.2.1. Структура программы

Программа состоит из следующих  модульных частей:

  1. Main_cpp.cpp – главный модуль программы. Содержит переменные и основной код приложения;
  2. stdafx.h – заголовочный файл, содержащий обращения к заголовочным файлам С++ и Windows;
  3. My_Comander.rc – файл, содержащий имена иконок, используемых в программе, а также строки выводимые в качестве всплывающих подсказок;
  4. Arr.ico – графический файл изображения стрелки перехода на уровень вверх;
  5. CGFolder.ico - графический файл изображения закрытой зелёной папки;
  6. CYFolder.ico - графический файл изображения закрытой желтой папки;
  7. OYFolder.ico - графический файл изображения открытой желтой папки;
  8. Tree.ico - графический файл изображения дерева;
  9. GLitera.ico - графический файл изображения иконки приложения;
  10. Copy.ico - графический файл изображения копирования файла;
  11. New.ico - графический файл изображения новой папки;
  12. Delete.ico - графический файл изображения удаления файла;
  13. Move.ico - графический файл изображения перемещения файла;
  14. Refresh.ico - графический файл изображения обновления;
  15. Rename.ico - графический файл изображения переименования файла.

3.2.2. Структуры данных

При разработке программы  помимо основных типов данных использовались такие типы как:

HWND – данные этого типа являются указателями окна;

HIMAGELIST – данные этого типа являются указателями на списки изображений;

TBBUTTON – представитель этой структуры хранит информацию о кнопке панели инструментов;

HINSTANCE – данные этого типа  являются указателями на данный экземпляр;

HICON – данные этого типа являются указателями на иконку;

RECT – переменные этого типа  хранят координаты верхнего левого  угла, а также высоту и ширину  прямоугольника;

SHFILEINFO – переменная данного типа хранит информацию о файле необходимую операционной системе;

SYSTEMTIME – переменная данного типа хранит информацию в формате системного времени;

SHFILEOPSTRUCT – переменная данного типа хранит информацию об операции с файлом которую должна выполнить операционная система;

WIN32_FIND_DATA – представители этой структуры содержат информацию о найденных файлах.

При этом для окна ListView использовались:

LV_COLUMN – данные этого  типа являются колонками элемента ListView;

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).

Данная функция создана для  выполнения основных задач:

    1. регистрация оконного класса, создание окна программы, отображение его на экране, организация цикла обработки сообщений;
    2. создание меню;
    3. создание панели инструментов;
    4. создание элементов управления ListView;
    5. создание элемента управления TreeView;
    6. создание элементов управления ComboBox;
    7. создание элемента управления Edit.

Функция LRESULT CALLBACK WindowFunc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam).

Это оконная функция, обрабатывающая сообщения  основного окна программы.  Осуществляется обработка следующих сообщений:

      1. WM_CREATE
    • производится установка таймера;
      1. WM_SIZE
    • перерисовка строки состояния;
    • перерисовка панели инструментов;
    • изменение размеров всех элементов управления, вызовом функции OnResize();
      1. 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 – происходит проверка наличия диска в системе, и если диск присутствует, то осуществляется переход на этот диск. Информация о диске представляется в виде таблицы.
      1. 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 – при окончании изменения имени файла или папки происходит проверка правильности ввода имени и замена на него;
      1. WM_TIMER – производится получение системных значений даты и времени и вывод их на строку состояния;
      1. WM_DESTROY – производится уничтожение главного окна программы.

Функция LRESULT EditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) при вводе пути с строку адреса и нажатии клавиши Enter вызывает функцию GoTo (hwndListView1,CurrDir1,himlSmall1);

Функция 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, в которой хранится информация о найденных подпапках и файлах.