Міністерство освіти і науки, молоді та спорту України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
КУРСОВА РОБОТА
з дисципліни "Системне програмне забезпечення"
на тему:
"Утиліта дефрагментації файлів у файлових системах NTFS та FAT32"
Завдання
Розробити утиліту, що дефрагментує дані у файлових системах NTFS та FAT32. Основні функції цієї програми:
аналіз дискового накопичувача;
переривання аналізу на певному етапі із збереженням дефрагментованої частини;
відображення кластерів, їх пощук;
повна інформація про дисковий накопичуавач;
вибір розміру блоків кластерів;
загальне відображення фрагментів файлів, а також вільного місця.
Анотація
Розроблено утиліту, що забезпечує дефрагментування даних на дискових накопичувачах. Дана програма орієнтована на Windows 98/NT/XP/7, не потребуючи потужних параметрів комп’ютера за наявності файлових систем FAT32 або NTFS.
Середовищем розробки було обрано Microsoft Visual C++ 6.0. В якості мови програмування взято C та реалізовано графічний інтерфейс.
Програма виконує сканування, оновлення списку пристроїв, пошук файлів, дефрагментацію, відображення кластерів і додаткової інформації.
Зміст
Вступ………………………………………………………………….…………..5
1. Теоретична частина…………………………………………………………..6
Файлова система…………………………………………………….....….6
Файлова система FAT32……………………….…………………………7
Файлова система NTFS...……………………….…………………………8
Порівняння файлових систем NTFS та FAT32…………………….……9
Фрагментація та дефрагментація……………………………………….10
Аналіз завдання ……………………….……………………………………...11
Розробка утиліти……………………………………………………………...12
Вибір середовища програмування…………………………………....…12
Файли проекту утиліти………………………………………………….13
Опис структури програмного проекту…………………………………14
Опис алгоритмів розв’язання задачі……………………………………15
Структура даних і функцій…………………………………………...…16
Розробка інтерфейсу……………………………………………………..19
Інтерфейс утиліти……..……………………….…………………...……20
Тестування та інструкція використання утиліти …………………………..21
Інструкція використання утиліти………………………..………………21
Тестування утиліти…………………………………………....…………23
Висновки………………………………………………………………….………24
Список використаної літератури…………………...………...…………………25
Додаток А. Граф-схема алгоритму роботи утиліти..………...…………………26
Дотаток Б. Лістинг програми……...………………...………...…………………27
Вступ
Недоліком де фрагментації є низька швидкість роботи з файлами. Неможливість обробити файл послідовно призводить до уповільнення роботи з диском. Звичайним користувачам рідко потрібна така висока швидкість роботи з диском, втрати могли б бути несуттєвими. Але в Windows віртуальна пам'ять знаходиться на тому ж самому диску, що і файли. А Windows використовує віртуальну пам'ять (або файл підкачки) регулярно. Тому у випадку сильно фрагментованого диска комп'ютер може починати сильно гальмувати не тільки при роботі з диском.
Окрім фрагментації диска, є ще два види фрагментації - фрагментація оперативної пам'яті і фрагментація даних усередині файлу. Вони рідко використовуються, але є ситуації, коли програма після довгої роботи споживає все більше і більше оперативної пам'яті. Тут, звичайно, може бути так званий "витік пам'яті" - помилка розробника. Але іноді винна саме фрагментація. Фрагментація ж даних усередині файлу - зовсім рідкісне явище, воно зустрічається переважно в базах даних.
1. Теоретична частина
Файлова система
Щоб спростити роботу з дисками, їх поверхня розбивається на кластери, які, залежно від використовуваної файлової системи і об'єму диска, можуть мати різний об'єм. Від розміру кластера частенько залежить ефективність роботи ПК.
В даний час використовуються файлові системи FAT 16 (для запису та розміщення файлів використовується 16 біт), FAT 32 (32 біта) і NTFS .
Файлова система є невід'ємною частиною операційної системи.
Основою файлової системи є диск або будь-який розділ на диску, ви ділений в окремий логічний диск. Кожен диск має власна унікальна назва або, як найчастіше говорять, — ім'я.
Найменшою одиницею виміру інформації в комп'ютері є файл.
Файл — це сукупність зв'язаних один з одним записів на носієві, що розглядаються операційною системою і програмами як єдине ціле. Кожен файл має ідентифікаційне ім'я, розширення і дорога доступу до нього. При записі файлу йому задаються певні атрибути. Це розмір, дата створення і зміни, а також такі атрибути, як:
• "системний" — атрибут вказує на те, що файл є системним. Наявність цього атрибуту в операційних системах Windows може блокувати видалення файлу, а також його зміна і переміщення в інший каталог, що необхідне для безвідмовної роботи комп'ютера. Особливо високий пріоритет атрибут має в операційних системах Windows 2000/ XP . Інколи для системних файлів навіть не можна змінити атрибути;
• "прихований" — атрибут дозволяє ховати деякі файли, які, на думку користувача або програм (операційної системи), не повинні ні змінюватися, ні віддалятися, ні переміщатися в інші каталоги. Використовується в парі з попереднім атрибутом (для системних файлів) або окремо (для всіх інших файлів). Інколи використання цього атрибута приводить до появи збоїв в роботі деяких програм, які попросту не можуть виявити файл з атрибутом "прихований";
• "архівний" — цей атрибут не має особливого сенсу, він вказує на те, що файл готовий до архівації;
• "лише для читання" — цей атрибут дозволяє захистити файл випадкової або навмисної зміни або видалення, хоча він, звичайно, не має стовідсоткового захисту.
Дорога доступу до файлу — ідентифікатор, що містить ім'я диска і назву каталога, в якому міститься файл.
Файлова система FAT32
У сфері персональних комп'ютерів в 1987 р. виникла криза. Можливості файлової системи FAT, розробленої фірмою Microsoft за десять років до цього для інтерпретатора Standalone Disk Basic і пізніше пристосованої для операційної системи DOS, були вичерпані. FAT призначалася для жорстких дисків ємністю не більше 32 Мбайт, а нові НЖМД більшої ємності виявлялися зовсім марними для користувачів PC. Для систем Windows 95 фірма Microsoft розробила нове розширення системи FAT - FAT32, без будь-яких гучних заяв передбачене в пакеті OEM Service Pack 2. Система FAT32 встановлюється тільки в нових PC, і не розраховуйте отримати її при переході до нової версії Windows 95, хоча, за твердженням Microsoft, це розширення стане складовою частиною основного пакету дл модернізації Windows (з кодовою назвою Memphis), випуск якого очікується пізніше в цьому році. У цій статті ми коротко розглянемо загальну структуру файлових систем FAT, а потім зупинимося на нововведення, що відрізняють FAT32. Щоб уникнути плутанини, стару 16-розрядну версію будемо називати FAT16.
Області диска
Ця файлова система передбачає ряд спеціальних областей на диску, виділених для організації простору диска в процесі його форматування - головний запис завантаження, таблицю розбиття диска, запис завантаження, таблицю розміщення файлів (від якої система FAT і отримала свою назву) і кореневий каталог . На фізичному рівні простір диска розбивається на 512-байт області, звані секторами . У системі FAT місце для файлів виділяється блоками, які складаються з цілого числа секторів і іменуются кластерами. Число секторів в кластері повинна бути кратна ступеня двійки. (Дізнатися розмір кластера у своїй системі ви можете за допомогою програм CHKDSK або SCANDISK.) В Microsoft називають ці кластери одиницями виділення пам'яті (allocation unit).
Файлова система NTFS
Основа NTFS
Базисом NTFS є головна таблиця файлів (Master File Table, MFT).MFT спочатку резервує під себе одну восьму частину розділу (приблизно 12%). Якщо місце на розділі закінчується, MFT скорочується в два рази, звільняючи для файлів користувача вільний простір. Процедура може повторюватися кілька разів. При появі незайнятого місця MFT знову резервує під себе 12% від обсягу розділу, що приводить до небажаного ефекту - фрагментації MFT. При цьому ефективність роботи з NTFS-диском падає.
Файли і каталоги
В NTFS будь-який елемент є файлом, включаючи каталоги і головну таблицю файлів. Елемент складається з двох частин: обов'язкової запису про нього в MFT і опціональних параметрів, які називаються потоками. Всі дані файлу представляють собою необов'язкові параметри (його вміст, версія, дата останньої модифікації, автор і т. д.). Але найбільш відомі файлові менеджери дають користувачеві інформацію лише про обмежену і заздалегідь визначеному наборі потоків. А розмір файлу, що показується користувачеві, є обсягом тільки одного потоку, який, власне, і являє собою те, що ми звикли традиційно називати даними файлу. Виходить, що текстовий документ, що складається всього з декількох сторінок тексту, може займати не один гігабайт, прихований в іншому потоці.
Характерно також, що файл, що містить невеликі за обсягом дані, може мати тільки посилання на запис в MFT. У цьому випадку дані зберігаються в головній таблиці файлів разом з інформацією про самому елементі. Грубо кажучи, весь файл знаходиться усередині MFT.
Каталоги в NTFS являють собою посилання на інші директорії і файли.
Порівняння файлових систем NTFS та FAT32
Файлова система — це базова структура, яку комп’ютер використовує для впорядкування даних на диску. При встановленні нового жорсткого диска його слід поділити та відформатувати перед тим, як можна буде зберігати на ньому дані. Windows підтримує три типи файлових систем: NTFS, FAT32 і старішу файлову систему FAT (також її називають FAT16), яка рідко використовується.
Файлова система NTFS
Для цієї версії Windows найкраще використовувати файлову систему NTFS. Вона має багато переваг над файловою системою FAT32, наприклад:
можливість автоматично виправляти деякі помилки диска, які не може виправити FAT32;
покращена підтримка жорстких дисків великої місткості;
кращий захист, оскільки можна використовувати дозволи та шифрування для обмеження доступу до вказаних файлів певним користувачам.
Файлова система FAT32
Файлові системи FAT32 і FAT було розроблено для попередніх версій операційної системи Windows, таких як Windows 95, Windows 98 і Windows Millennium Edition. Файлова система FAT32 не підтримує функцій безпеки, які має NTFS, тому якщо на розділі або томі використовується файлова система FAT32, будь-який користувач, який має доступ до вашого комп’ютера, може відкрити будь-які файли. Файлова система FAT32 також обмежує розмір диска. Розділ із файловою системою FAT32 не може бути більшим за 32 Гб у цій версії Windows, крім того, не можна зберігати на такому розділі файли, більші за 4 Гб.
Фрагментація та дефрагментація
Фрагментація це термін, який використовується для опису невикористаного простору між фізичного розташування файлів на жорсткому диску. Щоб вирішити проблему фрагментації, використовується процес, відомий як дефрагментація. Дефрагментація файлів перебудовується таким чином, щоб не залишати пусті місця на жорсткому диску.
Фрагментація в першу чергу викликане неефективністю деяких алгоритмів для зберігання даних. Найбільш поширеною проблемою в цих алгоритмів є те, що вони усувають ретельну перевірку жорсткого диска визначити найкраще місце для розміщення файлів, але замість цього помістіть файл в найбільш доступній місці. Для посилання на метафори, які використовуються раніше, це було б як потенціал вашого будинку, тому, що вона залишає пусте відстань між найближчими сусідами. Ще однією причиною фрагментації відомий як внутрішньої фрагментації і часто навмисним рази. Для полегшення доступу, багато файлів мають так званий Slack просторі. Натяжні просторі навмисно порожній простір між ними всередині файлів або файлів, які дозволяють комп'ютеру швидко диференціювати різні інструкції в коді. Внутрішня фрагментація як правило, не шкідливі для вашого комп'ютера, оскільки він є неповнолітнім збільшення розміру файлу застосовується до первісної програмі.
2. Аналіз завдання та способи його вирішення
2.1 Аналіз завдання
Виходячи з поставленого завдання програма мусить забезпечувати:
Фрагментацію файлів.
Підтримку файлових систем NTFS та FAT32.
Відображення кластерів.
Також користувачу потрібно надати простий та зрозумілий користувацький інтерфейс.
Отже, програмі необхідно реалізувати такі функції:
отримання доступ до дисків вінчестера, а також інших зовнішніх запам’ятовуючих пристроїв;
отримання доступів до всіх файлів та папок;
відображення фізичної структури файлів, тобто їх кластерів;
отримання повної інформації про файли;
функція переривання форматування та виходу з програми;
зручний інтерфейс.
Отже ця утиліта надасть змогу без додаткових зусиль отримувати інформацію про форматовані файли системи. Блок-схема алгоритму вирішення задачі знаходиться у ДОДАТКУ А.
3. Розробка утиліти
3.1 Вибір середовища програмування
Для виконання даного курсового проекту було вибрано середовище Microsoft Visual C++ 6.0 - лінійка продуктів фірми Майкрософт, що включають інтегроване середовище розробки програмного забезпечення і ряд інших інструментальних засобів.
Випущена в червні 1998 - остання версія Visual Studio, що працює на платформі Win9x. Як і раніше популярна серед програмістів, що використовують Visual Basic . Дана версія була основним середовищем розробки додатків під Windows від Microsoft, до появи платформи . NET .
Майже все програмне забезпечення світового класу, від провідних Web-браузери для критично важливих корпоративних прикладних програм, побудований з використанням Microsoft Visual C++ розвитку системи.
Visual C++ 6.0 є найбільш продуктивним C++ інструмент для високопродуктивних розвитку для Windows і Web. Visual C + + 6.0 забезпечує новий рівень продуктивності на C + +, без шкоди для гнучкості, продуктивності та управління.
На додаток Microsoft Visual C++ 6.0 містить непогану підтримку веб та розвитку підприємництва. За допомогою Microsoft Visual C++ 6.0 Professional Edition, можна скористатися надійним розвитком компонентів, потужним інструментами для баз даних і повною підтримкою Інтернет для вирішення стратегічних проблем.
Файли проекту утиліти
Source files:
main.c – головний файл програми, який забезпечує її виконання;
defrag.c – файл, який забезпечує функції для фрагментування даних;
list.c – містить список доступу до файлів і папок;
statbar.c – забезпечує появу корисної інформації внизу інтерфейсу програми.
Header files:
globals.h – містить перелік глобальних змінних та функцій;
defrag.h – файл, який містить структури для фрагментування даних;
list.h – містить структури відображення та списку доступу до файлів і папок;
statbar.h – містить оголошення для statbar.c.
resourse.h – містить команди #define, при яких замінюються макроси-імена кнопок ні числа.
Resourse files:
main.rc – файл доступу до інтерфейсу програми;
comp.ico, dir.ico, file.ico, frag.ico, free.ico, lock.ico, main.ico, mft.ico, small.ico, system.ico – іконки інтерфейсу програми.
3.3 Опис структури програмного проекту
Проект складається з 9 модулів, та модуля, в якому міститься містяться ресурси проекту, тобто графічна частина проекту.
Загальна схема проекту із способами взаємодії між модулями наведена на рисунку 2.2.
Розбиття програми на різні файли визначається логічною структурою програми. Використання додаткових модулів дозволило спростити реалізацію нашого проекту та більш наочно показати взаємодію одних частин проекту з іншими та значно зменшити час на відлагодження та компіляцію цілого проекту.
Рис. 2.2. Загальна схема проекту
3.4 Опис алгоритмів розв’язання задачі
Відбувається завантаження створених іконок, кожна з яких відповідає за відображення певного типу: файл, папка, системні файли, фрагментовані. Присутня ініціалізація системних кольорів (Blue Green Red) із заданням шістнадцяткового коду для кольору як внутрішньої частини, так і для обрамлення.
Функції GetWindowsDirectory((LPSTR) cWinDir, MAX_PATH) та GetSystemDirectory((LPSTR) cSysDir, MAX_PATH) дозволяють отримати доступ до папок системи .
Тепер потрібно забезпечити вибір пристрою для сканування. Поставивши галочку на потрібному томі за це відповідає функція BOOL СheckActivities(void). Якщо потрібний пристрій не було знайдено, то за допомогою функції BOOL UpdateDrivesMenu(HMENU hMenu) відбувається оновлення спику пристроїв. Далі відбувається сам процес фрагментації. Закінчивши фрагментацію вибраного тому, отримаємо відображення кластерів у головному вікні. Для того щоб закінчити роботу з програмою, потрібно натиснути Exit або Alt+X. Також існує ще ряд додаткових вбудованих функцій для роботи з головним вікном, що забезпечують зручну навігацію. При відкритті за допомогою функції void OpenVolume( void ) потрібного тому відбувається сортування файлів, вибираючи їх рекурсивно і з підкаталогів методом сортування списку структури DICT за допомогою ітераційного сортування знизу вгору.
Граф-схема алгоритму роботи утиліти подана у додатку A.
3.5 Структура даних і функцій
Програма складається з 9 модулів і файлу ресурсів main.rc.
Основний файл - main.c. В ньому знаходиться послідовність дій програми, тобто в даному модулі програма викликає інші підмодулі які виконують якусь функцію.
main.c
Головний файл проекту, який містить спочатку оголошення функцій, а потім їх реалізацію. Серед них:
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) – функція для роботи з головним вікном програми;
ATOM MyRegisterClass( HINSTANCE hInstance ) – реєструє класи вікон потрібні для відображення вікон у відповідних пропорціях;
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) – зберігає примірники вказівників, створює головне вікно прогами;
BOOL CheckActivities(void) – функція, яка дозволяє керувати командами аналізу, зупинки, зміни пристрою;
void SetBlockSize(int newsize) – дозволяє встановлювати розмір відображення блоків;
void ChangeSize(HWND hWnd) – змінює розмір і дозволяє його підганяти під відповідні розміри вікна та StatusBar;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) – дозволяє керувати подіями головного вікна;
void GetDiskParameters(void) – дозволяє отримувати параметри диска, серед яких: ім’я диску, присвоєна літера, об’єм пам’яті;
void ResetStatusBar(void) – встановлення StatusBar у початковий стан;
void OpenVolume( void ) – відкриття потрібного тому;
BOOL UpdateDrivesMenu(HMENU hMenu) – оновлення списку пристроїв та отримання повної інформації про них;
LRESULT CALLBACK About ( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) – функція для управління полем “About”;
LRESULT CALLBACK ClusterViewProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) - функція для управління полем “Clusterviewer”;
BOOL InitClusterView(HINSTANCE hInstance, HWND hWnd) – ініціалізація кластерів, тобто присвоєння відповідного типу відповідній іконці, а також забезпечення інформації про кластер;
void AddToClusterList(int img, char *name, ULONGLONG Lcn,
ULONGLONG lenFile, char *status) – функція добвляє кластер до його списку;
void FindFile(void) – пошук файлів у всіх директоріях;
void UpdateDriveInformation() – оновлення інформації про драйвер, тобто про файли папки, імена, об’єм пам’яті;
void UpdateClusterList() – оновлення списку кластерів;
defrag.c
Цей файл відповідає за фрагментування, а також відображення процесу на екрані. Виділяю такі йункції:
void OutLine3(char *buff) – функція забезпечує текстову інформацію над StatusBar;
void DrawNoBlockBound(int x, int y) – малює межі, де немає блоків;
void DrawBlockBounds(ULONGLONG Cstart, ULONGLONG Cend, BOOL clearmark) – малює межі між відображеними кластерами;
void DrawBlocks(ULONGLONG Cstart, ULONGLONG Cend, HPEN hp, HBRUSH hb) – відображує кластери різними кольорами;
void DrawProgress(int progress) – малює динамічний процес відображення фрагментації файлів тома;
void CheckForMFT(ULONGLONG *cl2, ULONGLONG *nu2) – перевірка на няавнсіть Master File Table;
void DumpBitmap(void) – малює відображені кластери у зелених, світло-зелених та білих тонах;
struct DICT *DumpFile(char *Path, char *filename, __int64 Bytes) – вивантажує кластери файлів і вставляє в список фрагментовані файли;
void LockUpDriveChange(void *dummy) – блокує можливість зміни пристрою при фрагментації;
void ScanDir(char *Path) - сканування каталогу і всіх його підкаталогів (рекурсивно) файлів і створює список файлів і їх розташування в пам'яті для подальшого використання;
void DrawBitMap(void *dummy) – малює відображення кластерів у головному вікні;
void AnalyzeVolume(void *dummy) – відбувається аналіз, тобто фрагментація тому.
list.c
struct DICT *InsDIR(char *name, __int64 size) – структура зі вказівником, що забезпечує створення списку файлів тома;
struct DICT *CopyDIR(struct DICT *top) - структура зі вказівником, що забезпечує копіювання списку файлів тома;
void DelDIR(struct DICT *top) - структура зі вказівником, що забезпечує видалення списку файлів тома;
struct DICT * SortDict (register struct DICT *chain3,
long int listlength,
int sortItem) - структура зі вказівником, що забезпечує сортування списку файлів тома.
3.6 Розробка інтерфейсу
Основною є поставлена задача відображення кластерів, які повинні вказувати на свій певний тип. Для цього, використовуючи BitMap, отримуємо певні іконки.
/ - використовувані системою;
/ - папки;
/ - файли;
/ - фрагментовані файли;
/ - вільний простір.
За допомогою діалогових вікон Microsoft Visual C++ 6.0 розробляю зручний користувацький інтерфейс (Рис. 2.1), який включає в себе наступні компоненти:
Button – кнопка, при натиску якої відбувається певна подія;
Static Text – дозволяє записувати текст, який неможливо змінити користувачем при виконанні вже готової утиліти;
List Box – відображає певну інформацію у вікні;
Scroll Bar – дозволяє промотувати дані.
/
Рис. 2.1. користувацький інтерфейс
3.7 Інтерфейс утиліти
Так виглядає головне вікно утиліти при її запуску (Рис. 3.1.):
/
Рис. 3.1. головне вікно утиліти
Меню Fragmentation містить такі команди управління фрагментатором:
Analyze F5 – фрагментування даних;
Stop Escape – зупинка фрагментації;
Exit Alt+X – вихід з програми.
Меню Drives містить команди вибору накопичувача даних:
Refresh Drive List – оновлення про наявність накопичувачів;
- команди прямого вибору дисків.
Меню View містить такі команди огляду:
Blocksize – дозволяє вибирати розмір блоків;
Clusterviewer Ctrl+V – перегляд кластерів;
Drive-Information Ctrl+I – інформація про дані на пристрою.
В нижній частині інтерфейсу утиліти розташований StatusBar, який видає інформацію в динамічному режимі про аналіз текучого файлу, про кількість проаналізованих папок і файлів, фрагментованих частин і об’єм опрацьованої інформації.
4. Тестування та інструкції використання програми
4.1 Інструкція з використання утиліти
Для запуску утиліти необхідно запустити виконавчий файл, після чого з’явитися вікно (Рис.4.1.)
/
Рис.4.1.Вікно програми при початковому запуску
В меню Drives потрібно вибрати том, з яким будемо працювати і запускаю його на аналіз за допомогою меню Fragmentation або натиском клавіші F5, після чого отримаємо вікно з процесом фрагментації (Рис. 4.2.).
/
Рис. 4.2. вікно з процесом фрагментації
Після цього в меню View можна вибрати команду Clusterviewer (Ctrl+W), при виконанні якої відобразиться інформація про кластер (Рис. 4.3.) або можна вибрати команду Drive-Information (Ctrl+W), при виконанні якої відобразиться інформація про просканований накопичувач (Рис. 4.4.).
/
Рис. 4.3. інформація про кластер
/
Рис. 4.4. інформація про просканований накопичувач
4.2. Тестування утиліти
Тестування утиліти є одним із етапів розроблення. За допомогою тестування, ми можемо дізнатися про всі її недоліки. Для тестування потрібно запустити утиліту та перевірити її працездатність, використовуючи усі можливі параметри. У результаті тестування було виявлено:
Недоліки:
Тривалий час аналізу інформації;
Відсутність можливості сканувати окремі папки чи файли;
Відображення неповної кількості кластерів.
Переваги:
Робота програми з різними файловими системами, а також з ОС Windows 98/2000/XP/Vista/7;
Зручний інтерфейс, реалізований на інтернаціональній (англійській) мові;
Реалізація всіх потрібних функцій фрагментатора;
Тестування на коректність роботи розробленого продукту проводилося на Windows 7 з файловими системами NTFS та FAT32, а також з підключенням різних типів зовнішніх пристроїв.
Під час роботи утиліти ніяких збоїв не було зафіксовано. Отже, розроблена утиліта працює коректно.
Висновки
Підбиваючи підсумки можна сказати, що поставлена задача виконана, реалізована мета, яка полягала у створенні утиліти з такими функціями:
аналіз дискового накопичувача;
переривання аналізу на певному етапі із збереженням фрагментованої частини;
відображення кластерів, їх пощук;
повна інформація про дисковий накопичуавач;
вибір розміру блоків кластерів;
загальне відображення фрагментів файлів, а також вільного місця.
Простий та зрозумілий користувацький інтерфейс не вимагає зусиль щодо ознайомлення з принципом роботи даної утиліти. Виявлено ряд переваг та недоліків і переваг, існують можливості вдосконалення програми.
Отже, ця курсова робота є лише вступом до реалізації глобальних прикладних програм.
Список використаної літератури
1. В. А. Шеховцев, Операційні системи – К.: Питер, 2006. – 555с.
2. Бекон Дж., Гарріс Т. Операційні системи. – К.: Видавнича група ВНV, Питер, 2004. – 608с.
3. Гордеев А. В., Молчанов А. Ю., Системное программное обеспечение. – СПб.: Питер, 2001. – 736с.
4. Інші інтернет-ресурси.
к
Додаток А. Граф-схема алгоритму роботи утиліти
Додаток Б. Лістинг програми
main.c
// main.c
// A thread that uses functions from the C run-time libraries should
// use the _beginthread and _endthread C run-time functions for thread
// management rather than CreateThread and ExitThread. Failure to do
// so results in small memory leaks when ExitThread is called.
// Selten benutzte Teile der Windows-Header nicht einbinden
#define WIN32_LEAN_AND_MEAN
//#define VC_EXTRALEAN
// Windows Header Dateien der C-Laufzeit
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <commctrl.h>
#include <process.h>
#include <math.h> // _div
#include "resource.h"
#include "globals.h"
#include "defrag.h"
#include "statbar.h"
#include "list.h"
TCHAR szTitle[MAX_LOADSTRING];
TCHAR szWindowClass[MAX_LOADSTRING];
TCHAR szDefrag[MAX_LOADSTRING];
HMENU hMenu; // menu-handle
HIMAGELIST hSmall; // Handle to image list
BOOL minimized;
BOOL maximized;
BOOL changesize;
BOOL bUpdating; // another thing to wait for in CheckActivities()
// Vorausdeklarationen von Funktionen, die in diesem Code-Modul enthalten sind:
ATOM MyRegisterClass( HINSTANCE );
BOOL InitInstance( HINSTANCE, int );
BOOL InitClusterView( HINSTANCE, HWND );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
LRESULT CALLBACK About( HWND, UINT, WPARAM, LPARAM );
LRESULT CALLBACK ClusterViewProc( HWND, UINT, WPARAM, LPARAM );
void ChangeSize(HWND hWnd);
void CreateBackBuffer(HWND hWnd);
BOOL UpdateDrivesMenu(HMENU);
void ErrorMsg(LPTSTR szMsg);
void AddToClusterList(int img, char *name, ULONGLONG Lcn,
ULONGLONG lenFile, char *status);
void OpenVolume(void);
void SetSizeLimit(int MID);
void SetBlockSize(int newsize);
BOOL CalcClusterNo(long *xpos, long *ypos);
void FindFile(void);
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
MSG msg;
HACCEL hAccelTable;
ghInst = hInstance; // Instanzzugriffsnummer in globaler Variable speichern
SetCursor(LoadCursor(NULL, IDC_APPSTARTING));
// Globale Zeichenfolgen initialisieren
LoadString(ghInst, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(ghInst, IDC_MAIN, szWindowClass, MAX_LOADSTRING);
hiMain = LoadImage(ghInst, (LPCTSTR)IDI_SMALL, IMAGE_ICON,0,0,LR_VGACOLOR|LR_SHARED);
MyRegisterClass(ghInst);
// Initialisierung der Anwendung durchfьhren
if( !InitInstance( ghInst, nCmdShow ) )
return FALSE;
hAccelTable = LoadAccelerators(ghInst, (LPCTSTR)IDC_MAIN);
// Hauptnachrichtenschleife:
while( GetMessage(&msg, NULL, 0, 0) ) {
if( !TranslateAccelerator (msg.hwnd, hAccelTable, &msg) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
return msg.wParam;
}
// FUNKTION: MyRegisterClass()
// AUFGABE: Registriert die Fensterklasse.
// nur notwendig mit Win32-Systemen 'RegisterClassEx'
// kleine Symbole mit den richtigen Proportionen
ATOM MyRegisterClass( HINSTANCE hInstance )
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MAIN);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = 0x000000;
wcex.lpszMenuName = (LPCSTR)IDC_MAIN;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = hiMain;
return RegisterClassEx(&wcex);
}
// FUNKTION: InitInstance(HANDLE, int)
// AUFGABE: Speichert Instanzzugriffsnummer, erstellt Hauptfenster
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) {
HWND hWnd;
int i=0;
HMENU hsub;
hMenu = LoadMenu(hInstance, (LPCTSTR)IDC_MAIN);
// release
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
NULL, hMenu, hInstance, NULL);
/*
// debug
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
-4, -4, 600, 1000, // optimal for debug 12xx x 10xx
//-4, -4, 260, 460, // optimal for debug at 1024 x 768
//-4, 106, 648, 437, // voptXP size
//-4, -4, 1024, 256, // small height at top of screen
NULL, hMenu, hInstance, NULL);
*/
hsub = GetSubMenu(hMenu, 0);
DeleteMenu(hsub, 10, MF_BYPOSITION);
ghWnd = hWnd;
ghInst= hInstance;
if( !hWnd ) return FALSE;
hiDir = LoadImage(ghInst, (LPCTSTR)IDI_DIR , IMAGE_ICON,16,16,LR_VGACOLOR|LR_SHARED);
hiFile = LoadImage(ghInst, (LPCTSTR)IDI_FILE , IMAGE_ICON,16,16,LR_VGACOLOR|LR_SHARED);
hiFrag = LoadImage(ghInst, (LPCTSTR)IDI_FRAG , IMAGE_ICON,16,16,LR_VGACOLOR|LR_SHARED);
hiFree = LoadImage(ghInst, (LPCTSTR)IDI_FREE , IMAGE_ICON,16,16,LR_VGACOLOR|LR_SHARED);
hiSystem = LoadImage(ghInst, (LPCTSTR)IDI_SYSTEM, IMAGE_ICON,16,16,LR_VGACOLOR|LR_SHARED);
hiMFT = LoadImage(ghInst, (LPCTSTR)IDI_MFT , IMAGE_ICON,16,16,LR_VGACOLOR|LR_SHARED);
hiComp = LoadImage(ghInst, (LPCTSTR)IDI_COMP , IMAGE_ICON,16,16,LR_VGACOLOR|LR_SHARED);
ColBG = GetSysColor(COLOR_BTNFACE);
hbBG = CreateSolidBrush(ColBG);
hpBG = CreatePen(PS_SOLID, 1, ColBG);
// B G R
ColDGreen = 0x007700;
ColGreen = 0x009900;
ColLGreen = 0x00BB00;
ColL2Green = 0x00DD00;
ColL3Green = 0x00FF00;
ColVio = 0xCC00CC;
ColRed = 0x0000FF;
ColOck = 0x00CCFF;
ColYellow = 0x99CCCC;
ColLYellow = 0x00FFFF;
ColBlue = 0x990000;
ColLBlue = 0xFF6666;
ColL2Blue = 0xFF9999;
ColBrown = 0x003399;
ColWhite = 0xFFFFFF;
ColGray = 0xBBBBBB;
ColBlack = 0x000000;
hpDGreen = CreatePen(PS_SOLID, 1,