Компьютерные науки : Дипломная работа: Розробка програмного забезпечення файлового менеджера
Дипломная работа: Розробка програмного забезпечення файлового менеджера
ЗМІСТ
ВСТУП
1 СТРУКТУРА
ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ФАЙЛОВОГО МЕНЕДЖЕРУ
2 СТРУКТУРА ДАНИХ
2.1 Стуктури
завантажувального запису
2.2 Структура
службової області FAT
2.3 Структура елемента
каталогу
2.4 Програмн
структури
3 ОПИС АЛГОРИТМІВ ПЗ
ФМ
3.1 Алгоритм пошуку
дисків й іменування дисків
3.2 Алгоритм доступу к
об'єктам файлової системи
3.3Алгоритм визначення
зайнятого місця на розділі
3.4 Алгоритм зрівняння
директорій
4 ОПИС ПРОГРАМНИХ
МОДУЛІВ.
5 МЕТОДИКА РОБОТИ
6 ДОСЛІДЖЕННЯ
РЕЗУЛЬТАТІВ
ВИСНОВОК
ДОДАТОК А - Код
програми файлового менеджеру
ВСТУП
Метою даного проекту є практичне дослідження та засвоєння прийомів роботи
з дисковими накопичувачами у середовищі ОС Windows
та роботи на низькому рівні з файловими системами FAT16/FAT32. Також підтримується робота з NTFS. Програма розроблена як WINDOWS програма, написана мовою С++. Інтерфейс програми був
розроблений схожий до існуючих файлових менеджерів середовища Microsoft Windows.
1. СТРУКТУРА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ФАЙЛОВОГО МЕНЕДЖЕРУ
Файловий менеджер – програма, яка виконує візуалізацію вмісту каталогу,
дозволяє виконувати різноманітні операції з об’єктами каталогу, наприклад,
копіювання, видалення, правка та інші.
Файловий менеджер, який був розроблений згідно з завданням до проекту
виконує наступні функції:
-
пошук і найменування всіх
логічних дисків у межах даної конфігурації технічних засобів;
-
визначення характеристик
логічних дисків;
-
порівняння директорій за
кількісним фактом.
Також була реалізована підтримка довгих імен та
кирилиці для об’єктів директорій.
Структура файлового менеджеру на рис. 1.1.
Згідно зі структурою файловий менеджер має інтерфейс, в якому можна
обрати наступну дію.
Список дій показаний в структурі ФМ.
Програма багатомодульну структуру. Кожний модуль виконує свої функції.
Кожна дія, яку можна виконати, реалізована в окремій функції. Виключення із
загального правил являє собою модуль manager.cpp, який реалізує як інтерфейс (за правилами створення VCL) так і роботу з NTFS та порівняння директорії. Тому на структурній
схемі проекту він зустрічається двічі.
При старті програми спочатку створюється інтерфейс користувача, виконується
пошук усіх логічних дисків в межах даної конфігурації технічних засобів,
відбувається найменування усіх знайдених дисків.
Після цього обирається завантажувальний диск та зчитується кореневий
каталог цього диску. Вміст каталогу показується на екрані. Далі програма очіку
наступних вказівок користувача щодо подальшої діяльності.

Рисунок 1.1 – Структура ФМ
2
СТРУКТУРА ДАНИХ
У програмі використовуються декілька структур даних. Структури
завантажувального запису, службової частини ФС та елементу каталогу – це
системні структури. Також програма містить і власні структури – інформація про
логічні диски та інші.
2.1
Структури
завантажувального запису
Інформація про розділи жорсткого диску зберігається у першому сектор
пристрою. Це – головний завантажувальний запис MBR (Master Boot Record). Структура MBR наведена у табл. 2.1.
Таблиця 2.1 - Структура MBR
| Зсув |
Розмір, байт |
Опис |
Ім’я |
| 0 |
1BE h |
Код завантажника MBR |
reserved |
| 1BE h |
40 h |
Масив з 4х елементів Partition Table |
Partition Table |
| 1FE h |
2 |
Сигнатура MBR (0х55АА) |
sign |
Один елемент Partition Table може визначати логічний диск або розширений
розділ. У межах одного жорсткого диска може бути лише один розширений розділ.
Заповнення полів Partition Table виконується
на етапі розбивання диска на розділи. В табл. 2.2 наведена структура елементу Partition Table.
Таблиця
2.2 - Структура елементу Partition Table
| Зсув |
Розмір, байт |
Опис |
Ім’я |
| 0 |
1 |
Ознака активного розділу (80h - активний / 0 - неактивний) |
priznak |
| 1 |
1 |
Початкова голівка розділу |
starthead |
| 2 |
2 |
Початкова доріжка та сектор розділу. 6-бітний номер
сектору визначається як 6 молодших бітів молодшого байту, а 10-бітний номер
циліндру, як 2 старші біти молодшого байту та розташовані за ним 8 бітів
старшого байту |
starttrack |
| 4 |
1 |
Код системи |
syscode |
| 5 |
1 |
Кінцева голівка розділу |
endhead |
| 6 |
2 |
Кінцева доріжка та сектор розділу |
endtrack |
| 8 |
4 |
Початковий сектор розділу |
startsector |
| 12 |
4 |
Розмір розділу у секторах |
size |
Поле код системи містить інформацію про тип ФС (основний розділ) або про
ознаку розширеного розділу (05h, 0Fh).
Основний розділ описує логічний диск, адресу початку якого можна взяти з
структури елементу Partition Table – поле startsector. Це ж поле у елементі Partition Table при ознаці розширеного розділу вказує на
вторинну MBR. Ця MBR може містити максимум два елементи Partition Table з чотирьох. Перший елемент буде вказувати на
черговий логічний диск, а другий – на наступну вторинну MBR. Для
отримання абсолютної адреси початку логічного диска необхідно до значення поля startsector додати адресу MBR, у якій описується
даний диск.
2.2
Структура службово
області FAT
Після отримання абсолютної адреси початку логічного диска в програм
виконується зчитування першого сектора диска. В системі FAT це
завантажувальна область (BOOT – область). BOOT – область містить параметри та
характеристики логічного диска. Її структура для ФС FAT12 та FAT16 наведена у табл.
2.3, а для системи FAT32 – у табл. 2.4.
Таблиця 2.3 – Структура BOOT – сектору для FAT12 та FAT16
| Зсув |
Розмір, байт |
Опис |
Ім’я |
| 0 |
3 |
Команда JMP на код завантажника |
jmpcode |
| 3 |
8 |
Назва операційної системи,
у якій виконано форматування диску |
os |
| 11 |
2 |
Кількість байт у секторі |
BytePerSector |
| 13 |
1 |
Кількість секторів у
кластері |
SectorPerCluster |
| 14 |
2 |
Кількість резервних
секторів |
SizeReserv |
| 16 |
1 |
Кількість копій FAT |
NumberCopiesFAT |
| 17 |
2 |
Кількість елементів
кореневого каталогу |
MaxDirElem |
| 19 |
2 |
Розмір диску в секторах для дисків <32MB, інакше 0 |
Smallsize |
| 21 |
1 |
Описувач середовища |
MediaDescriptor |
| 22 |
2 |
Кількість секторів таблиці FAT |
SizeFAT16inSectors |
| 24 |
2 |
Секторів на доріжці |
SectorPerTrack |
| 26 |
2 |
Кількість голівок |
Heads |
| 28 |
4 |
Кількість схованих секторів |
NumberHiddenSectors |
| 32 |
4 |
Розмір в секторах для
дисків > 32MB |
BigSize |
| 36 |
1 |
Тип пристрою(для першого
диску в системі 80h, для
нших 0) |
-- |
| 37 |
1 |
Резерв |
-- |
| 38 |
1 |
Сигнатура 29h. |
Code |
| 39 |
4 |
Серійний номер |
SerialNumber |
| 43 |
11 |
Метка диску |
Label |
| 54 |
8 |
Ідентифікатор FAT (‘FAT12’ або ‘FAT16’) |
FATID |
| 62 |
2 |
Код завантажника |
-- |
Таблиця 2.4 – Структура BOOT – сектору для FAT32
| Зсув |
Розмір, байт |
Опис |
Ім’я |
| 0 |
3 |
Команда JMP на код завантажника |
jmpcode |
| 3 |
8 |
Назва операційної системи, у якій виконано
форматування диску |
os |
| 11 |
2 |
Кількість байт у секторі |
BytePerSector |
| 13 |
1 |
Кількість секторів у кластері |
SectorPerCluster |
| 14 |
2 |
Кількість резервних секторів |
SizeReserv |
| 16 |
1 |
Кількість копій FAT |
NumberCopiesFAT |
| 17 |
4 |
Резерв |
--- |
| 21 |
1 |
Описувач середовища |
MediaDescriptor |
| 22 |
2 |
Резерв |
--- |
| 24 |
2 |
Секторів на доріжці |
SectorPerTrack |
| 26 |
2 |
Кількість голівок |
Heads |
| 28 |
4 |
Кількість схованих секторів |
NumberHiddenSectors |
| 32 |
4 |
Резерв |
--- |
| 38 |
6 |
Резерв |
reserv1 |
| 44 |
4 |
Початковий кластер кореневого каталогу |
StartCluster |
| 48 |
2 |
Початковий сектор структури FS INFO |
BegFS |
| 50 |
2 |
Номер сектору з копією BOOT-розділу |
BootCopy |
| 52 |
12 |
Резерв |
reserv2 |
| 64 |
1 |
Фізичний номер пристрою |
PhysNum |
| 65 |
1 |
Резерв |
reserv3 |
| 66 |
1 |
Розширена сігнатура |
ExtSign |
| 67 |
4 |
Серійний номер пристрою |
SerialNumber |
| 71 |
11 |
Метка диску |
Label |
| 82 |
8 |
Ідентифікатор (‘FAT32’) |
FATID |
| 90 |
2 |
55AA |
--- |
Дана структура дозволяє отримати доступ до інформаційних полів
BOOT-сектора необхідного логічного диска.
BOOT-область в файлових
системах FAT12,16 займа
1 сектор, а в ФС FAT32 – 3 сектори. Другий сектор містить додатков
параметри та сигнатури, а третій – продовження програми завантаження. За
завантажувальною областю розташовані таблиці FAT
таблиці кластерів. Їх кількість визначається у BOOT-секторі.
У файлових системах FAT12,16 за таблицями кластерів знаходиться кореневий
каталог. Його розмір обмежений кількістю елементів, вказаних в BOOT-секторі.
Кореневий каталог FAT32 може не розміщатися відразу ж за таблицями кластерів та
не має меж щодо свого розміру. За всіма цими службовими областями знаходиться область
даних.
Таблиця FAT містить інформацію про розподілення дискового
простору під об’єкти ФС. Ця таблиця – масив елементів із розмірністю 12, 16 або
32 біти в залежності від версії ФС. Номер елементу таблиці FAT відповідає номеру кластера в області даних. У таблиці 2.5 наведен
можливі значення одного елементу FAT.
Таблиця 2.5 – Значення елементу FAT
| FAT12 |
FAT16 |
FAT32 |
Пояснення |
| 0 |
0 |
0 |
Вільний кластер |
| FF0-FF6 |
FFF0-FFF6 |
0FFFFFF0-0FFFFFF6 |
Зарезервований кластер |
| FF7 |
FFF7 |
0FFFFFF7 |
BAD-кластер |
| FF8-FFF |
FFF8-FFFF |
0FFFFFF8-0FFFFFFF |
Останній кластер об’єкту |
Усі інші значення вказують на наступний кластер.
Послідовність кластерів, яка може належати одному об’єкту в таблиці ФАТ,
представляє собою односпрямований список, голова якого в явному виді відсутня,
а кінець визначається ознакою кінця ланцюжка.
2.3
Структура елемента
каталогу
Кожен каталог представляє собою послідовність дескрипторів. Структура
дескриптора об’єкта з коротким ім’ям наведена у табл. 2.6 для FAT13/FAT16 та у табл. 2.8 для FAT32.
Структура байту атрибуту у табл. 2.7.
Таблиця 2.6 – Структура дескриптора для FAT12 / FAT16
| Зсув |
Розмір, байт |
Опис |
Ім’я |
| 0 |
1 |
Ознака дескриптору: 0 – вільний; E5h - видалений; інше-перший символ
мені об’єкту |
fn |
| 1 |
7 |
7 символів імені об’єкту |
name |
| 8 |
3 |
Розширення об’єкту |
ext |
| 11 |
1 |
Байт атрибутів |
attr |
| 12 |
10 |
Резерв |
reserv |
| 22 |
2 |
Час створення або останньої модифікації |
TimeMade |
| 24 |
2 |
Дата створення або останньої модифікації |
DateMade |
| 26 |
2 |
Молодша частина початкового кластеру об’єкта |
FirstCluster |
| 28 |
4 |
Розмір об’єкта в байтах |
SizeFileInBytes |
Таблиця 2.7 – Байт атрибутів об’єкта
|