1. Постановка завдання. P>
Завдання полягає в розробці файлової оболонки для операційноїсистеми Windows'95/98. У програмі реалізувати механізми копіювання,перенесення, видалення, перейменування файлів і директорій, пошук файлів замасці, щоб переглянути список файлів за маскою, перегляд і редагування файлів узовнішніх редакторах, присвоєння і отримання атрибутів файлу, привласненняатрибутів групи файлів, запуск програм з рядком параметрів, створеннядиректорії, визначення розміру директорії, отримання інформації про диск,налаштування інтерфейсу програми, визначення сумарного обсягу дисковогопростору, що займає групою файлів, відновлення інтерфейснихпараметрів при повторному запуску програми. Так само забезпечити управлінняоболонкою за допомогою маніпулятора типу «миша» та клавіатури. p>
2. Метод реалізації. P>
Для реалізації поставленої задачі необхідно створити інтерфейскористувача складається з таких компонентів: p>
А) список директорій. p>
Б) список файлів p>
В) список дисків p>
Г) головне меню програми p>
Д) панель інструментів. p>
Для організації інтерфейсу користувача будуть використаністандартні візуальні компоненти Delphi 3.0. Для реалізації механізмукопіювання/вставки [1] необхідно запам'ятати список копійованихфайлів/директорій, кожен елемент списку повинен містити інформацію промісце знаходження файлу/директорії і імені файлу/директорії. При копіюваннігрупи файлів або одного файлу необхідно визначити їх місце положення вієрархії каталогів, а потім заповнити список, вибираючи всі файли зазначенікористувачем зі списку файлів показаного в інтерфейсній частини програми
(списку файлів). При копіюванні директорії необхідно також визначити їїположення і провести сканування самій директорії зі збереженням в спискуімен файлів що містяться в копійований директорії та структури каталогів. Длявставки директорії в місце копіювання, необхідно відтворити її структуру,а потім скопіювати в неї файли. Для здійснення цього процесувищезазначений список розбивається на два. У першому списку (назвемо йоготимчасовий список директорій) повинна знаходитися структура каталогів, а подругий (тимчасовому списку файлів) розташовані в цих каталогах файли. Двасписку необхідні для зменшення часу витраченого на копіювання, такяк за наявності одного списку необхідний аналіз кожного елемента списку напредмет наявності піддиректорій і створення цих піддиректорій в місцікопіювання, а в копійований директорії в більшості випадків кількістьдиректорій менше ніж кількість файлів і часу на перевірку знадобитисябільше, ніж при використанні двох списків.
Якщо ж використовувати два списки то для відтворення структури каталогівнеобхідно лише відсортувати тимчасовий список директорій відповідно доієрархією каталогів, і створювати директорії проходячи по списку зверху вниз.
Тому що після сортування, директорії розташовані на верхніх рівняхвкладеності каталогів будуть знаходитися у верхній частині списку, а директоріїрозташовані на нижніх рівнях будуть знаходитися в кінці списку. Післявідтворення структури директорії залишається тільки переписати файли.
Алгоритм заповнення тимчасових списків показаний на малюнку 1 у вигляді блоксхеми. Реалізація даного алгоритму буде базуватися на використанніфункцій FindFirst і FindNext, ці функції здійснюють перегляд вмістувказаної директорії і як результат повертають ім'я знайденогоелемента, його атрибути, час створення і розмір. При аналізі атрибутівзнайденого елемента можна визначити цей елемент директорія або файл, івідповідно до аналізу записати його ім'я і положення у відповіднийсписок. На описаному алгоритмі буде базуватися також механізм видаленнядиректорії.
Згадані вище функції FindFirst і FindNext будуть також застосовані приреалізації механізму пошуку файлів за маскою. p>
3. Опис програми. P>
Програма реалізована на мові паскаль з використанням
Delphi 3.0 - середовища візуального програмування додатків для Windows'95. P>
Детально розглянемо реалізацію деяких механізмів, таких як: p>
. Пошук файлів; p>
. Копіювання Директорія; p>
. Видалення директорій. P>
Пошук файлів: p>
Пошук файлів в програмі реалізований з використанням маски. У масціможливе використання службового символу, заміни групи невідомихсимволів в імені файла, або його розширення «*», а також можливий пошук зрізницею регістрів символів, і без такого, з зазначенням області пошуку.
Так само існують можливості пошуку з накладанням додатковихобмежень, таких як розмір шуканого файлу, а так само часу створенняфайлу. Детально з реалізацією вище перерахованих механізмів ви можетеознайомитися в додатку 1 на сторінках (29-35). Тут же, ми розглянемореалізацію основної частини цього механізму. p>
Для пошуку файлів за маскою необхідно завдання маски пошуку у вигляді
*. сом або autoexec .*, або інші можливі варіанти, і області пошуку [2]. Уякості додаткового параметра може бути задана перевірка регістрасимволів. Блок схема пошуку файлів показано на малюнку 1. При пошукувикористовується рекурсивна процедура (текст 1.) у якій послідовнопроглядається область пошуку, включаючи p>
Текст 1. p>
Procedure TFindForm.FindInCurrentDir (CurDir: string); p>
Var p>
SizeF: integer ; i: integer; p>
EndList: boolean; p>
F: TSearchRec; p>
D: string; begin p>
(Висновок у статус рядку директорії в якій проводитьсяпошук) p>
FindForm.StatusFind.Panels [1]. Text: = CurDir; p>
FindFirst (CurDir +'*.*', faAnyFile, F); p>
FindNext (F); repeat p>
// Перевірка розширеного пошуку p>
If FindForm.CBAdvSearch.Checked and
(F. AttrfaDirectory) then begin p>
// Перевірка на розмір знайденого файлу p>
// розмір і час створення знайдений файл повинні перебувати в межах заданих p>
// користувачем if not (((F. Size (F. Size> StrToInt (FindForm.SGreater.Text)))) then p>
Continue; if not (((FileDateTime (CurDir + F. Name) p>
FindForm.DateIsAfter.Date))) then Continue; end; p>
// перевірити чи не є найдений файл директорією if F. Attr = faDirectory then if (F. Name '.') and (F. Name'..') then begin p>
// якщо знайдений файл - директорія,рекурсивний виклик пошуку в даній директорії p>
FindInCurrentDir (CurDir + F. Name +''); end; if (F. Name'..') and (F. Name '.') then p>
// якщо файл підходить під маску, занести його до списку if CompareFileWithMask (F. Name) then begin p>
FindForm.FileWasFind.Items.Add (CurDir + F. Name); p>
FindForm.StatusFind.Panels [0]. Text: = IntToStr (StrToInt (FindForm.StatusFind.Panels [0]. Text) +1); p>
FindForm.FileWasFind.Refresh; end; p>
// виконувати пошук поки не закінчаться файли в поточної області заданоїобласті. p>
Until ((FindNext (F) 0 )); p>
FindClose (F); end; p>
підкаталоги, порівнюється ім'я знайденого файл з маскою пошуку , і якщо всенакладені обмеження виконані, знайдений файл заноситься до спискузапропонований користувачеві для перегляду. Для організації пошуку в різнихобластях змінюється лише місце першого дзвінка рекурсивної процедури. p>
У формі пошуку файлів можливий перехід до вибраного файлу, зі спискузнайдених, а також запуск або перегляд/редагування в зовнішньомуредакторі. p>
Копіювання/Видалення директорій: p>
Описана вище реалізація алгоритму пошуку файлів застосована вреалізації копіювання та видалення директорій [3]. При реалізаціїрозглянутих процесів знадобиться наявність двох тимчасових списків:списку директорій і списку файлів (кожний рядок обох списків містить усебе «повний шлях» (FULL PATH)) файлу/директорії. Для реалізації тимчасовихсписків використаний візуальна компонента ListBoх, дана компонентаявляє собою динамічний список рядків і набір процедур та функцій дляуправління цим списком. Заповнення цих списків здійснюється за допомогоюперегляду директорії. З лістингом програми реалізуються ці процеси виможете ознайомитися в додатку 1 на сторінках (17,23-27). Длякопіювання/видалення директорій складаються обидва згаданих вище списку. Привставці директорії створюється повне дерево директорії, а потім відбуваєтьсякопіювання зображень [4]. Під час видалення директорії так само складаються обидвасписку, але так як стандартної процедури видаляють не порожню директоріюні, то на початку видаляються всі файли в видаляється директорії (включаючи файлищо знаходяться в підтеках), а потім порожні директорії. p>
4. Аналіз результатів. P>
Програма має всі необхідні функції роботи з файлами. Всі функціїможна активізувати натисканням комбінації клавіш. Проводиться статистикакопіювання, перенесення, видалення файлів/директорій в зручній для сприйняттякористувачем формі. Існує простий механізм накладання фільтру напоказуються файли. При зміні інтерфейсу програми, всі змінизберігаються і будуть відновлені при наступному запуску. Запуск додатківз рядком параметрів із зазначенням типу запуску. Висновок повідомлення прокількості піддиректорій в директорії і про кількість файлів розташованих уній. Визначення розміру директорії привласнення атрибутів групи файлівпростим натисканням двох клавіш. p>
5. Висновки.
У ході роботи була розроблена програма маніпулювання файлами ідиректоріями.
У програмі реалізовані наступні механізми:копіювання, перенесення, видалення, перейменування файлів і директорій,пошук файлів за маскою,накладення фільтру на список файлів,перегляд і редагування файлів у зовнішніх редакторах,привласнення і отримання атрибутів файлу,привласнення атрибутів групи файлів,запуск програм з рядком параметрів,створення директорії,визначення розміру директорії,отримання інформації про диск,налаштування інтерфейсу програми,визначення сумарного обсягу дискового простору, що займає групоюфайлів,відновлення інтерфейсних параметрів при повторному запуску програми.
Програма має зручний інтерфейс і може використовуватися для роботикористувачами з різним рівнем знань.
Системні вимоги: Операційна система Windows'95 і вище, 500 кілобайтдискового простору. p>
6. Література.
П. Туротт, Г. Брент, Р. Багдазіан, С. Тендон «DELPHI 3», DiaSoft, Київ,
1997 p>
-----------------------< br>[1] Механізм копіювання розбитий на дві частини копіювання/вставка виходячи зпередбачається інтерфейсу програми
2 Можливі 3 галузі пошуку: пошук у поточній директорії; пошук на поточномудиску; пошук на всіх жорстких дисках (також мережевих).
3 Перенесення директорій не розглядається з огляду на те, що його алгоритмє послідовноюкомбінацією алгоритму копіювання і алгоритму видалення.
4 Якщо обсяг копійованих файлів перевищує обсяг порожнього місця в місціпризначення, копіювання вироблено не буде p>
p>