Дипломная работа: Розробка програмного забезпечення файлового менеджера
Рисунок 3.4 – Алгоритм визначення зайнятого місця
3.4 Алгоритм зрівняння директорій
Рисунок 3.5 – Алгоритм зрівняння директорій
4 ОПИС ПРОГРАМНИХ МОДУЛІВ
Точка входу знаходиться у модулі з назвою manager.cpp. Після автоматичної ініціалізації графічного інтерфейсу (все це відбувається за рахунок VCL), виконується пошук і іменування всіх логічних дисків. Код, відповідальний за це, знаходиться в модулі mbrmodule.cpp. Далі, якщо знайдено завантажувальний розділ і, якщо файлова система на ньому є однією з підтримуваних, виконується пошук усіх файлів у кореневому каталозі. Якщо файлова система розділу - FAT або FAT32 то робиться це за допомогою модуля fat32.cpp. Якщо файлова система – NTFS, то пошук виконується невеликими функціями, описаними, безпосередньо, у головному модулі (manager.cpp, на таку структуру вже наголошувалося раніше). Інші файлові системи не підтримуються.
Короткий опис ключових функцій:
PHARDINFO Init(char n);
Функція виконує всі попередні дії, необхідні для подальшої роботи з жорстким диском(виклик CreateFіle(), визначення розміру сектора й т.д.). У випадку невдачі повертає NULL.
BOOL WalkOnMBR(PHARDINFO inf, PPLOGICAL_DISC first);
Функція проходить по ланцюжку MBR жорсткого диска, попередньо відкритого функцією Іnіt
void DeInit(PHARDINFO inf);
Звільняє зайняту структурами пам'ять і закриває дескриптор жорсткого диска
PDISC_INFO Fat32Init(char disc);
Виконує всі необхідні попередні дії для роботи з логічним диском, файлова система котрого FAT або FAT32 (зчитування таблиці FAT, визначення кластера кореневого каталогу та ін.)
UINT GotoDir(PDISC_INFO info, char* cpPath);
Повертає номер кластера виходячи зі шляху до директорії
UINT ListDirectory(PDISC_INFO info, HDIR hDir,UINT dwDirSize,char* cpObjectName, PFILES* ppfiles);
Виконує побудова списку файлів у директорії або пошук елемента каталогу в ній.
PFILES PrintRootDirectory(PDISC_INFO info);
Пошук всіх файлів у кореневому каталозі
HDIR LoadDirectory(PDISC_INFO info, UINT cluster, UINT* dirsize);
Завантажує вміст зазначеного ланцюжка кластерів на згадку
char* Fat32ReadFile(PDISC_INFO info, UINT FirstCluster, UINT* dwFileSize);
Читає вміст файлу, перший кластер котрого відомий
void Fat32DeInit(PDISC_INFO info);
Звільняє зайняту пам'ять і закриває дескриптори.
void AnalyzeError(char* comment, int iErr);
Виконує аналіз помилки, що відбулася, результати виводить в MessageBox головного вікна