Розробка програмного забезпечення файлового менеджера. Дипломная (ВКР). Информационное обеспечение, программирование.

Розробка програмного забезпечення файлового менеджера. Дипломная (ВКР). Информационное обеспечение, программирование.




⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻


























































Информационное обеспечение, программирование

Вы можете узнать стоимость помощи в написании студенческой работы.


Помощь в написании работы, которую точно примут!

Похожие работы на - Розробка програмного забезпечення файлового менеджера

Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе

Нужна качественная работа без плагиата?

Не нашел материал для своей работы?


Поможем написать качественную работу Без плагиата!

1 СТРУКТУРА
ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ФАЙЛОВОГО МЕНЕДЖЕРУ


2.1 Стуктури
завантажувального запису


3.1 Алгоритм пошуку
дисків й іменування дисків


3.2 Алгоритм доступу к
об'єктам файлової системи


3.3Алгоритм визначення
зайнятого місця на розділі


ДОДАТОК А - Код
програми файлового менеджеру







Метою даного проекту є практичне дослідження та засвоєння прийомів роботи
з дисковими накопичувачами у середовищі ОС Windows
та роботи на низькому рівні з файловими системами FAT16/FAT32. Також підтримується робота з NTFS. Програма розроблена як WINDOWS програма, написана мовою С++. Інтерфейс програми був
розроблений схожий до існуючих файлових менеджерів середовища Microsoft Windows.







1. СТРУКТУРА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ФАЙЛОВОГО МЕНЕДЖЕРУ




Файловий менеджер – програма, яка виконує візуалізацію вмісту каталогу,
дозволяє виконувати різноманітні операції з об’єктами каталогу, наприклад,
копіювання, видалення, правка та інші.


Файловий менеджер, який був розроблений згідно з завданням до проекту
виконує наступні функції:


-
пошук і найменування всіх
логічних дисків у межах даної конфігурації технічних засобів;


-
визначення характеристик
логічних дисків;


-
порівняння директорій за
кількісним фактом.


Також була реалізована підтримка довгих імен та
кирилиці для об’єктів директорій.


Структура файлового менеджеру на рис. 1.1.


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


Список дій показаний в структурі ФМ.


Програма багатомодульну структуру. Кожний модуль виконує свої функції.
Кожна дія, яку можна виконати, реалізована в окремій функції. Виключення із
загального правил являє собою модуль manager.cpp, який реалізує як інтерфейс (за правилами створення VCL) так і роботу з NTFS та порівняння директорії. Тому на структурній
схемі проекту він зустрічається двічі.


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


Після цього обирається завантажувальний диск та зчитується кореневий
каталог цього диску. Вміст каталогу показується на екрані. Далі програма очікує
наступних вказівок користувача щодо подальшої діяльності.


У програмі використовуються декілька структур даних. Структури
завантажувального запису, службової частини ФС та елементу каталогу – це
системні структури. Також програма містить і власні структури – інформація про
логічні диски та інші.




Інформація про розділи жорсткого диску зберігається у першому секторі
пристрою. Це – головний завантажувальний запис MBR (Master Boot Record). Структура MBR наведена у табл. 2.1.




Масив з 4х елементів Partition Table

Один елемент Partition Table може визначати логічний диск або розширений
розділ. У межах одного жорсткого диска може бути лише один розширений розділ.
Заповнення полів Partition Table виконується
на етапі розбивання диска на розділи. В табл. 2.2 наведена структура елементу Partition Table.




Таблиця
2.2 - Структура елементу Partition Table




Ознака активного розділу (80h - активний / 0 - неактивний)

Початкова доріжка та сектор розділу. 6-бітний номер
сектору визначається як 6 молодших бітів молодшого байту, а 10-бітний номер
циліндру, як 2 старші біти молодшого байту та розташовані за ним 8 бітів
старшого байту

Поле код системи містить інформацію про тип ФС (основний розділ) або про
ознаку розширеного розділу (05h, 0Fh).


Основний розділ описує логічний диск, адресу початку якого можна взяти зі
структури елементу Partition Table – поле startsector. Це ж поле у елементі Partition Table при ознаці розширеного розділу вказує на
вторинну MBR. Ця MBR може містити максимум два елементи Partition Table з чотирьох. Перший елемент буде вказувати на
черговий логічний диск, а другий – на наступну вторинну MBR. Для
отримання абсолютної адреси початку логічного диска необхідно до значення поля startsector додати адресу MBR, у якій описується
даний диск.




Після отримання абсолютної адреси початку логічного диска в програмі
виконується зчитування першого сектора диска. В системі FAT це –
завантажувальна область (BOOT – область). BOOT – область містить параметри та
характеристики логічного диска. Її структура для ФС FAT12 та FAT16 наведена у табл.
2.3, а для системи FAT32 – у табл. 2.4.




Таблиця 2.3 – Структура BOOT – сектору для FAT12 та FAT16


Назва операційної системи,
у якій виконано форматування диску

Кількість елементів
кореневого каталогу

Розмір диску в секторах для дисків <32MB, інакше 0

Розмір в секторах для
дисків > 32MB

Тип пристрою(для першого
диску в системі 80h, для
інших 0)

Ідентифікатор FAT (‘FAT12’ або ‘FAT16’)

Таблиця 2.4 – Структура BOOT – сектору для FAT32      




Назва операційної системи, у якій виконано
форматування диску

Початковий кластер кореневого каталогу

Початковий сектор структури FS INFO

Номер сектору з копією BOOT-розділу

Дана структура дозволяє отримати доступ до інформаційних полів
BOOT-сектора необхідного логічного диска.


BOOT-область в файлових
системах FAT12,16 займає
1 сектор, а в ФС FAT32 – 3 сектори. Другий сектор містить додаткові
параметри та сигнатури, а третій – продовження програми завантаження. За
завантажувальною областю розташовані таблиці FAT –
таблиці кластерів. Їх кількість визначається у BOOT-секторі.
У файлових системах FAT12,16 за таблицями кластерів знаходиться кореневий
каталог. Його розмір обмежений кількістю елементів, вказаних в BOOT-секторі.
Кореневий каталог FAT32 може не розміщатися відразу ж за таблицями кластерів та
не має меж щодо свого розміру. За всіма цими службовими областями знаходиться область
даних.


Таблиця FAT містить інформацію про розподілення дискового
простору під об’єкти ФС. Ця таблиця – масив елементів із розмірністю 12, 16 або
32 біти в залежності від версії ФС. Номер елементу таблиці FAT відповідає номеру кластера в області даних. У таблиці 2.5 наведені
можливі значення одного елементу FAT.




Таблиця 2.5 – Значення елементу FAT




Усі інші значення вказують на наступний кластер.


Послідовність кластерів, яка може належати одному об’єкту в таблиці ФАТ,
представляє собою односпрямований список, голова якого в явному виді відсутня,
а кінець визначається ознакою кінця ланцюжка.




Кожен каталог представляє собою послідовність дескрипторів. Структура
дескриптора об’єкта з коротким ім’ям наведена у табл. 2.6 для FAT13/FAT16 та у табл. 2.8 для FAT32.
Структура байту атрибуту у табл. 2.7.




Таблиця 2.6 – Структура дескриптора для FAT12 / FAT16




Ознака дескриптору: 0 – вільний; E5h - видалений; інше-перший символ
імені об’єкту

Час створення або останньої модифікації

Дата створення або останньої модифікації

Молодша частина початкового кластеру об’єкта

Таблиця 2.7 – Байт атрибутів об’єкта




Таблиця 2.8 – Структура дескриптора для FAT32




Ознака дескриптору: 0 – вільний; E5h - видалений; інше-перший символ
імені об’єкту

Дата створення або останньої модифікації

Старший байт номеру першого кластеру, який був
виділений об’єкту

Молодший байт номеру першого кластеру, який був
виділений об’єкту

Якщо об’єкт іменується довгим ім’ям, то під нього виділяється декілька
дескрипторів стандартного розміру (32б). Кількість дескрипторів визначається
довжиною імені об’єкта. Максимальна довжина імені об’єкта – 255 символів, які
зберігаються в форматі UNICODE (по два байти на один символ). У кожному
дескриптору може зберігатися 13 символів імені об’єкту. Структура дескриптора
для довгого імені наведена у табл. 2.9.




Таблиця
2.9 – Структура дескриптора для довгого імені




Ім’я в останній порції довгого імені може бути меншим за 13 символів. У
такому випадку значима частина імені завершується нулем. усі інші поля імені
заповнюються FFFF.




Всі необхідні програмні структури представлені в header-
файлах. Ціль їхнього створення - організація даних, прочитаних з носіїв.
Наприклад, кожний жорсткий диск буде представлений структурою




        char nHard;                   //номер
жорсткого диску


        void* hDrive;                //хендл жорсткого диску


        UINT dwSectorSize;     //розмір сектора


        UINT bitsPerSector;      //кількість розрядів для адресації всередині сектора


        UINT dwExtendedAddr; //адреса розширеного
розділу


Інформація
про розділи організується в список структур, по одному списку на кожний
жорсткий диск:




} LOGICAL_DISC, *PLOGICAL_DISC, **PPLOGICAL_DISC;




Після
того, як FAT32-розділ був відкритий для читання, інформація про
нього записується в таку структуру




        char Disc;                     //логічний диск


        UINT beginFAT;           //адреса
початку FAT-таблиці у секторах


        UINT nBytePerSector;  //розмір сектора у
байтах


        void* hDrive;                //хендл відкритого розділу


        char SectPerCluster;      //розмір
кластера в секторах


        UINT BytesPerCluster; //розмір кластера в байтах


        UINT sizeFAT;            //розмір FAT-таблиці
в секторах


        UINT*
pFAT;                        //адреса образу FAT-таблиці у ОЗУ


        UINT
sizeFATbytes;     //розмір FAT-таблиці в байтах


        USHORT
nFATCopy;           //кількість копій FAT


        USHORT
sizeReserved; //розмір зарезервованої області в секторах


        UINT
bitsPerSector;      //кількість розрядів для адресації всередині сектора


        UINT
RootCluster;        //номер першого
кластера корневой директории


        UINT
dwRootDirSize;   //кількість
кластерів для кореневої директорії


        HDIR
hRootDir;            //хендл кореневої
директориії


Список
прочитаних файлів організується в структуру:




Якщо необхідно вивести на екран уміст файлу, спочатку його вміст буде відображено в таку структуру:




У цьому пункті розглядаються послідовно алгоритми пошуку та іменування
дисків, доступу до об’єктів файлової системи, визначення зайнятого місця для
файлової системи FAT32, FAT16.




3.1 Алгоритм пошуку дисків й іменування дисків




Алгоритм іменування логічних дисків засновано на звіренні серійного
номера, отриманого логічного диска із серійним номером, збереженим системою.




Рисунок
3.1 – Пошук та найменування дисків





3.2 Алгоритм доступу к об’єктам файлової системи




Основна концепція файлової системи FAT полягає в тім, що кожному файлу й
каталогу виділяється структура даних, називана дескриптором. У цій структурі
зберігається ім'я файлу, його розмір, початкова адреса вмісту файлу й інші
метадані. Данні файлів і каталогів зберігається в блоках даних, називаних
кластерами. Якщо файлу або каталогу виділяється більш одного кластера, інші
кластери знаходять за допомогою структури даних, називаної FAT(File Allocation
Table). Структура FAT використовується як для ідентифікації наступних кластерів
у файлах, так і для визначення стану кластерів. Існує три версії FAT: FAT12,
FAT16 і FAT32. Вони відрізняються друг від друга насамперед розміром запису у
структурі FAT. Зв'язки між структурами даних показано на рис.
3.4.




Рисунок 3.4 – Зв’язки між структурами даних




Файлова система FAT ділиться на три фізичні області для FAT32, та на чотири для FAT12/16.
Перша область називається
зарезервованою; в FAT12 і FAT16 зарезервована область займає всього 1 сектор,
але формально її розмір визначається в завантажувальному секторі. Друга область
FAT - містить основні й резервні структури FAT. Вона починається в секторі,
котрий розташовано за зарезервованою областю, а її розмір визначається
кількістю й розміром структур FAT. Третя – кореневий каталог, для FAT12/16
починається за областю FAT, а у FAT32 має
повільне положення у області даних. Область даних - містить кластери, виділені
для зберігання файлів і вмісту каталогів.


Доступ до файлових об’єктів виконується з припущення, що відома адреса
першого кластеру об’єкту.


У даній реалізації алгоритм доступу до об’єктів містить дві частини –
алгоритм пошуку шляху до поточної директорії та алгоритм пошуку об’єктів у
завантаженій директорії.


Алгоритм
пошуку об’єктів в каталогі наведено на рис. 3.2


Алгоритм
пошуку поточного шляху - рис.3.3







Рисунок 3.2 – Алгоритм пошуку об’єктів
в каталогі





Рисунок 3.3 – Алгоритм пошуку
поточного шляху




3.3 Алгоритм визначення зайнятого місця на розділі




Визначення зайнятого місця на розділі реалізується шляхом аналізу таблиці
FAT. Виконується перевірка усіх елементів таблиці FAT. Рахується кількість елементів, що містять 0. Ці елементи в файловій системі
ідентифікують незайняте місце.


Отже, після повного перегляду FAT таблиці відома
кількість елементів FAT таблиці та кількість елементів незайнятого
місця. Знаходиться відсоткове співвідношення. Через нього обчислюється зайняте
місце в байтах.


Рисунок 3.4 – Алгоритм визначення зайнятого місця







Рисунок 3.5 – Алгоритм зрівняння директорій







Точка входу знаходиться у модулі з назвою manager.cpp. Після автоматичної ініціалізації графічного інтерфейсу (все це
відбувається за рахунок VCL), виконується пошук і іменування всіх
логічних дисків. Код, відповідальний за це, знаходиться в модулі mbrmodule.cpp. Далі, якщо знайдено завантажувальний розділ
і, якщо файлова система на ньому є однією з підтримуваних, виконується пошук
усіх файлів у кореневому каталозі. Якщо файлова система розділу - FAT або FAT32 то
робиться це за допомогою модуля fat32.cpp. Якщо файлова система – NTFS, то пошук виконується невеликими функціями,
описаними, безпосередньо, у головному модулі (manager.cpp, на таку структуру вже наголошувалося раніше). Інші файлові системи не
підтримуються.


Функція виконує всі попередні дії, необхідні для подальшої роботи з
жорстким диском(виклик CreateFіle(), визначення розміру сектора й т.д.). У
випадку невдачі повертає NULL.


BOOL WalkOnMBR(PHARDINFO inf, PPLOGICAL_DISC first);


Функція проходить по ланцюжку MBR жорсткого диска, попередньо відкритого
функцією Іnіt


Звільняє зайняту структурами пам'ять і закриває дескриптор жорсткого
диска


Виконує всі необхідні попередні дії для роботи з логічним диском, файлова
система котрого 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 AnalyzeError(char* comment, int iErr);


Виконує аналіз помилки, що відбулася, результати виводить в MessageBox головного вікна


void createFolder(PDISC_INFO info,AnsiString
newDirName)


Виконує додаткове завдання КП. Створення директорії в FAT16/32. Приймає у якості параметрів структуру
інформації про поточний розділ та назву нової директорії. Функція отримує інші
необхідні дані та інтерфейс до роботи з раніше створених функцій та глобальних
змінних (ознака кореневої директорії, поточний шлях, тип ФС та ін.).







Для навігації серед елементів каталогу та серед списку логічних дисків
використовуються дії миші. Для порівняння директорії – окрема кнопка «Сравнение папок». Для вибору поточного диску – випадаючий список з усіма літерами
наявних дисків.


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


При зміні поточного диску відбувається оновлення інформації про диск у
правій частині вікна, та якщо зміна диска була у правому вікні, то й там є
відновлення. та оновлюється гістограма зайнятого/вільного простору.







Відразу після запуску формується інтерфейс користувача й виводиться вміст
кореневого каталогу активного розділу. Виводиться наступна інформація про
файли: ім'я файлу, розмір, атрибути.


Також у праві1 частині вікна виводиться деяка інформація про логічний
диск.


На гістограмі відображено співвідношення зайнятого й вільного простору
логічного диску (рис. 6.1).




Рисунок
6.1 – Список файлів активного каталогу.




Перехід в іншу директорію здійснюється за допомогою мишки (подвійне
натискання) або ж натисканням клавіші ENTER (перед цим потрібна директорія
повинна бути виділена, цього можна домогтися нажатим клавіш "Нагору"
або "Униз" або ж одинарним натисканням лівої клавіші миші, рис.6.2).







Рисунок
6.2 – Список файлів в некореневому каталогі.




Зрівняння ми побачимо, нажавши кнопку «Сравнение папок». Праворуч від
панелей буде кількісна інформація щодо кожної панелі. (рис. 6.4).




Рисунок 6.4 – відображення вмісту кількісного зрівняння папок.







У
ході виконання курсового проекту
була створена програма для ОС Windows. Також були покращені навички роботи з
накопичувачем на жорсткому магнітному диску. Був розібраний низький рівень
існування інформації на жорсткому диску.


Так як основна увага приділялася роботі з ФС FAT,
були здобуті вичерпні знання про структуру цієї ФС та навички роботи з нею на
низькому рівні.







//---------------------------------------------------------------------------


//---------------------------------------------------------------------------


char DisplayName[]="#Commander from Hell#";


char path[65536],
path2[65536], pat[256], pat2[256], nulpat[256];
//pat,pat2 переменные для копирования имени которое будет
удалятся из пути


int fil1, fil2, dir1, dir2; // счетчики файлов и папок


void AnalyzeError(char* comment, int iErr)


         FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY,


         0, iErr, 0, locBuf, sizeof(locBuf), 0


                  if(locBuf[len-2]==0x0D)locBuf[len-2]=0;


        wsprintf(s,"%s (%u)
%s",comment?comment:"", iErr, locBuf);


        MessageBox(hwnd,s,DisplayName,MB_OK);


/*******************************************************************************


 *
Очистка списка файлов, необходима перед началом работы со списком. *


 *
Если забыть про очистку, то файлы на экране не очистятся, а новые добавятся *


******************************************************************************


                  free(pfiles->ansiname);


                  pfiles =(_FILES*) pfiles->next;


                  free(pfiles->ansiname);


                  pfiles =(_FILES*) pfiles->next;


/*******************************************************************************


 *
Конкретная функция для чтения директории в NTFS-томе *


*******************************************************************************


int NTFSReadDir(PLOGICAL_DISC pld, char* pPath)


        PFILES pfirst = NULL, pfiles, ppred = NULL;


        pFullPath[0] = pld->nDisc;


        if(pPath && pPath[0]!=0)wsprintf(pFullPath+3,pPath);


FindFirstFile(pFullPath,&fd))==INVALID_HANDLE_VALUE)return
0;


                  pfiles =(_FILES*)
malloc(sizeof(FILES));


                  if(!pfirst)pfirst = pfiles;


                  pfiles->attrib =
fd.dwFileAttributes;


                  pfiles->filesize =
fd.nFileSizeLow;


                  pfiles->ansiname =(char*)
malloc(strlen((const char*)&fd.cFileName)+1);


                  if(ppred)ppred->next = pfiles;


                  wsprintf(pfiles->ansiname,(const
char*)&fd.cFileName);


                  if(!FindNextFile(hFind, &fd))


                           if(GetLastError() ==
ERROR_NO_MORE_FILES)


                                     break;


int NTFSReadDir2(PLOGICAL_DISC pld, char* pPath)


        PFILES pfirst = NULL, pfiles, ppred = NULL;


        pFullPath[0] = pld->nDisc;


        if(pPath &&
pPath[0]!=0)wsprintf(pFullPath+3,pPath);


FindFirstFile(pFullPath,&fd))==INVALID_HANDLE_VALUE)return
0;


        if(files2)FreeFilesList2();


                  pfiles =(_FILES*)
malloc(sizeof(FILES));


                  if(!pfirst)pfirst = pfiles;


                  pfiles->attrib =
fd.dwFileAttributes;


                  pfiles->filesize =
fd.nFileSizeLow;


                  pfiles->ansiname =(char*)
malloc(strlen((const char*)&fd.cFileName)+1);


                  if(ppred)ppred->next = pfiles;


                  wsprintf(pfiles->ansiname,(const
char*)&fd.cFileName);


                  if(!FindNextFile(hFind, &fd))


                           if(GetLastError() ==
ERROR_NO_MORE_FILES)


                                     break;


/****************************************************************************


*
Получение свободного места в МБ свободного тома, если он в NTFS


**************************************************************************


UINT GetNtfsFreeSpace(PLOGICAL_DISC pld)


        __int64 i64FreeBytesToCaller, i64TotalBytes,
i64FreeBytes;


 if(Sysutils::GetDiskFreeSpaceEx (szdisk,


 //Application->MessageBoxA(IntToStr(i64FreeBytes/(1024*1024)).c_str(),IntToStr(i64FreeBytes/(1024*1024)).c_str(),MB_OK);


 return (i64FreeBytes/(1024*1024));


/*******************************************************************************


 *
Чтение заданной директории, определение того, какие ф-ции для этого надо *


*******************************************************************************


int ReadDir(PLOGICAL_DISC pld, char* pPath)


        ULONG dwDirSize;                //размер директории в кластерах


        HDIR hDir;                   //ccылка на
директорию


        UINT DirCluster; //номер кластера директории


        PFILES pfirst, pfiles, ppred;


        info =(_DISC_INFO*) pld->disc_info;


                  if((pld->id ==
0x07)||(pld->id == 0x17))


                           if(!pld->prcfree)pld->prcfree
= GetNtfsFreeSpace(pld);


                           return
NTFSReadDir(pld,pPath);


                  if(!(info =(_DISC_INFO*)
pld->disc_info = Fat32Init(disc)))


                           return 0;


                  pld->prcfree =
((PDISC_INFO)(pld->disc_info))->prcfree;


                  DirCluster=GotoDir(info, pPath+1);


                           hDir=LoadDirectory(info,
DirCluster, &dwDirSize);


                           ListDirectory(info, hDir,
dwDirSize, NULL, &pfirst);


                           free(hDir);


        else pfirst=PrintRootDirectory(info);


 pathh[(strrchr(pathh,'\\')-pathh)]='\0';


 strncpy(path+strlen(path)-1,nulpat,1);


                  if(files)FreeFilesList();


                  if(files)FreeFilesList();


                  if(files)FreeFilesList();


int ReadDir2(PLOGICAL_DISC pld, char* pPath)


        ULONG dwDirSize;                //размер директории в кластерах


        HDIR hDir;                   //ccылка на
директорию


        UINT DirCluster; //номер кластера директории


        PFILES pfirst, pfiles, ppred;


        info =(_DISC_INFO*) pld->disc_info;


                  if((pld->id ==
0x07)||(pld->id == 0x17))


                           if(!pld->prcfree)pld->prcfree
= GetNtfsFreeSpace(pld);


                           return
NTFSReadDir2(pld,pPath);


                  if(!(info =(_DISC_INFO*)
pld->disc_info = Fat32Init(disc)))


                           return 0;


                  pld->prcfree =
((PDISC_INFO)(pld->disc_info))->prcfree;


                  DirCluster=GotoDir(info, pPath+1);


                           hDir=LoadDirectory(info,
DirCluster, &dwDirSize);


                           ListDirectory(info, hDir,
dwDirSize, NULL, &pfirst);


                           free(hDir);


        else pfirst=PrintRootDirectory(info);


 pathh[(strrchr(pathh,'\\')-pathh)]='\0';


 strncpy(path2+strlen(path2)-1,nulpat,1);


                  if(files2)FreeFilesList();


                  files2 = pfirst;


                  if(files2)FreeFilesList();


                  files2 = pfirst;


                  if(files2)FreeFilesList();


                  files2 = pfirst;


/*-----------------------------------------------------------------------------*/




/*******************************************************************************


*******************************************************************************


        int i, iRetVal, nActive = 0;


        while(inf = hdd[nHDD] = Init(nHDD))


                  pld = inf->disklist;


                           combobuf[0] =
pld->nDisc;


                           combobuf[1] = ':';


                           combobuf[2] = 0;


 iRetVal = Form1->CBDiskName->ItemIndex;


 iRetVal = Form1->CBDiskName2->ItemIndex;


                           if(pld->active=='+')


                                     nActive =
iRetVal;


                                     currpld = pld;


                           pld =(_LOGICAL_DISC*)
pld->next;


/*-----------------------------------------------------------------------------*/


/*******************************************************************************


*******************************************************************************


PLOGICAL_DISC FindDiskByChar(char disk)


                  pld = inf->disklist;


                           if(pld->nDisc ==
disk)return pld;


                           pld =(_LOGICAL_DISC*)
pld->next;


/*-----------------------------------------------------------------------------*/


/*******************************************************************************


 *Поиск
диска по его индексу, вызывается, когда происходит смена текущего диска*


*******************************************************************************


PLOGICAL_DISC FindDiskByIndex(char index)


                  pld = inf->disklist;


                           if(j == index)return pld;


                           pld =(_LOGICAL_DISC*)
pld->next;


/*******************************************************************************


 *
Поиск файла в заранее сформированном списке по его индексу *


 *******************************************************************************


                  pfiles =(_FILES*) pfiles->next;


                  if(i == index)return pfiles;


                  pfiles =(_FILES*) pfiles->next;


/*******************************************************************************


 *
Ложимся спать и освобождаем все, что загадили. *


*******************************************************************************


                  pld = inf->disklist;


                           if(pld->disc_info)Fat32DeInit((_DISC_INFO*)pld->disc_info);


                           pred = pld;


                           pld =(_LOGICAL_DISC*)
pld->next;


                           free(pred);


/*****************************************************************************/


//---------------------------------------------------------------------------


__fastcall TForm1::TForm1(TComponent* Owner)


/*******************************************************************************


 *
Функция списка действий, обновление списка дисков. Выполняет полное *


 *
полное обновление, аналогично, как и при запуске программы. *


*******************************************************************************


void __fastcall TForm1::ARefreshListExecute(TObject
*Sender)


        while(inf = hdd[nHDD] = Init(nHDD))


                  pld = inf->disklist;


                           combobuf[0] =
pld->nDisc;


                           combobuf[1] = ':';


                           combobuf[2] = 0;


                           iRetVal =
CBDiskName->ItemIndex;


                           CBDiskName->Items->Add(combobuf);


 CBDiskName2->Items->Add(combobuf);


                           if(pld->active=='+')


                                     nActive =
iRetVal;


                                     currpld = pld;


                           pld =(_LOGICAL_DISC*)
pld->next;


/*******************************************************************************


 *
При первом показе формы устанавливает текущий диск как индекс значения в *


 *
списке дисков, это значение всегда используется для получения номера диска. *


*******************************************************************************


void __fastcall TForm1::FormShow(TObject *Sender)


/*******************************************************************************


 *
Вывод файлов на панель, функция списка действий *


 *******************************************************************************


v
Похожие работы на - Розробка програмного забезпечення файлового менеджера Дипломная (ВКР). Информационное обеспечение, программирование.
Итоговая Контрольная Работа По Обществу 8 Класс
Реферат: Нарушения умственного развития при детском церебральном параличе. Скачать бесплатно и без регистрации
Сочинение Про Город Костанай На Казахском
Учебное пособие: Методические указания му 6 2398-08
Реферат: Израиль 2
Конспекты лекций: Выразительность речи
Реферат по теме Древняя майя
Курсовая работа по теме Совершенствование управленческой деятельности в организации
Курсовая работа по теме Анализ практической ситуации и разработка рекомендаций и мероприятий по решению выявленных проблем компании ОАО 'Диэлектрические кабельные системы'
Реферат по теме Принципы создания объемного изображения. Стереокино
Педагогическое Мастерство Учителя Эссе
Дипломная работа по теме Массовые зрелища: традиции и современность
Контрольная Работа На Тему Исследование Астматического Статуса
Реферат: Death Penalty Essay Research Paper The Florida
Реферат: Строение и функции почек. Скачать бесплатно и без регистрации
Учебное пособие: Назначение боевые свойства ручных гранат РГД 5 РГ 42 Ф 1
Реферат: Побудова багатофункціонального комплексу
Итоговая Аттестационные Работы По Методике
Дипломная работа: Основные пути повышения эффективности государственного управления в регионе
Реферат: Курс лекций по Международным финансам
Учебное пособие: Организация и планирование производства
Реферат: Разработка и внедрение системы управления производством для сортового стана 390 Макеевского металлургического завода
Реферат: Основное производство НЛМК

Report Page