48990 (Системное программирование для операционных систем), страница 2
Описание файла
Документ из архива "Системное программирование для операционных систем", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48990"
Текст 2 страницы из документа "48990"
Список модулей проекта:
FileNames.cpp | Главный модуль программы. В сгенерированный автоматически код добавлена защита от запуска второй копии приложения. |
ArrayTemplate.h ArrayTemplate.cpp | Этот модуль реализует шаблон на динамические массивы со свойствами списка (коллекции). |
FSelectDirForm.h FSelectDirForm.cpp | Реализация формы выбора каталога. (код сгенерирован автоматически). |
FMain.h FMain.cpp | Реализация формы главного окна приложения. Основная часть кода находится здесь. |
Описанные (вручную) типы:
TArray | шаблон на динамический массив со свойствами списка элементов (коллекции) |
TIntArray | динамический массив с элементами int (на основе TArray) |
THandleArray | динамический массив с элементами HANDLE (void *) (на основе TArray) |
TGlobalList | тип-список строк для хранения имен файлов, а также номеров каталогов (в списке каталогов) для каждого имени |
TNameList | тип-список строк для хранения имен файлов-дубликатов (файлов-исключений),а также указателей на массивы номеров каталогов (TIntArray *) для каждого файла-дубликата |
TDirThread | тип-поток для проверки каталогов и подготовки отчета по одноименным файлам |
TNotifyThread | тип-поток для автоматического контроля проверяемых каталогов - при переименовке, добавлении и удалении файлов в данных каталогах (или их подкаталогах) инициирует проверку каталогов с подготовкой отчета |
TVerDirectory | тип-подготавливаемый отчет по одноименным файлам, с набором методов для подготовки отчета. |
-
Исходный текст программы приведен в приложении Б
-
Функциональные возможности программы
Программа осуществляет поиск одинаковых документов по имени и размеру. В программе предусмотрена защита от запуска второй копии приложения. При запуске второй копии приложения – она открывает и активизирует главное окно первой копии, и завершает работу.
Необходимо отметить, что программа хранит свои параметры (путь к контролируемому каталогу и список исключений) в файле «FileNames.inf» (в каталоге с исполняемым модулем программы). При запуске программы – она считывает параметры из этого файла, при закрытии программы параметры будут сохранены в этот файл. Если при запуске программы этот файл отсутствует – в качестве контролируемого назначается каталог с исполняемым модулем программы, а список исключений пуст.
Также нужно сказать о том, что при запуске программы, при условии что одноименных файлов нет – ее главное окно будет скрыто через две секунды после подготовки первого отчета. Это сделано для того, чтобы программу можно было включать в меню автозагрузки Windows, как любую другую фоновую программу (при запуске программы ее главное окно выступает в качестве заставки).
-
Руководство по использованию программы
Для запуска курсового проекта необходимо запустить файл Filenames.exe.
- Программа предназначена для контроля одноименных файлов на диске в выбранных каталогах.
- Загрузочный модуль программы - FileNames.exe .
- ОС Windows 9X, Windows NT/2000/XP , требования к машине (ПЭВМ) накладываются операционной системой.
При загрузке программа регистрирует значок в System Tray (правый нижний угол экрана), и при закрытии ее главного окна программа остается в памяти. Для закрытия программы надо щелкнуть мышью на значке в в System Tray и во всплывающем меню выбрать «Закрыть программу».
Для показа главного окна надо выбрать пункт всплывающего меню «Отчет, настройки программы» (см. рисунок 1).
Наглядное изображение программы приведено на рисунке 1:
Рисунок 1 – Вид окна программы
Для смены контролируемого каталога нажмите кнопку под надписью «проверяемый каталог» (надпись на кнопке-путь к контролируемому каталогу).
В появившемся окне (рисунок 2) выберите нужный каталог и нажмите «Ввод»
Рисунок 2 – Выбор каталога
При двойном щелчке на нужном каталоге окно выбора каталогов тоже закроется.
После этого будет произведена проверка (перепроверка) файлов для выбранного каталога (включая его подкаталоги), с подготовкой отчета по одноименным файлам.
При операциях добавления(копирования), удаления и переименования файлов в контролируемых каталогах – отчет по одноименным файлам обновляется автоматически, и если обнаруживаются одноименные файлы – будет выполнено оповещение пользователя (главное окно программы будет открыто и выведено на передний план).
Надо иметь в виду, что операция проверки выбранного каталога (с подготовкой отчета) может занять некоторое время, и сопровождается миганием надписи «Запущена проверка» в главном окне программы.
В главном окне программы также имеется список файлов-исключений, для которых оповещение пользователя не производится. Аналогично списку одноименных файлов, при выборе в списке исключений файла – в списке путей будут отображены пути расположения этого файла, или надпись «ФАЙЛ ОТСУТСТВУЕТ», если файл в контролируемом каталоге отсутствует.
Для переноса файла из списка одноименных файлов в список исключений выделите нужную строку в списке одноименных файлов и нажмите кнопку «перенести в список исключений».
Для переноса файла из списка исключений в список одноименных файлов выделите нужную строку в списке исключений и нажмите кнопку «перенести в список одноименных файлов». Если данный файл отсутствует в контролируемом каталоге, или присутствует в нем в единственном числе – в соответствующем сообщении вам будет предложено просто удалить данное имя из списка исключений.
Заключение
В результате проделанной работы была создана программа, осуществляющая поиск одинаковых документов (по имени, размеру, дате создания). Во время проведения работы были приобретены навыки работы с языком программирования высокого уровня Visual C++. Исходя из того, что программа полностью соответствует заданию курсового проекта, можно сделать вывод, что задание на курсовую работу выполнено в полном объеме.
Список использованных источников
-
Майкл Хаймен, Боб Арнсон. Visual C++: Учеб. Пособие. – М.: Диалектика, 2002. – 289 с.: ил.
-
А. Корера, С. Фрейзер, С. Маклин, Н. Кумар, С. Робинсон, П.Г. Саранг, С. Джентайл. Visual C++. Пособие для разработчиков. Изд-во «Лори», 2003. – 417 с.: ил.
Приложение А
(ОБЯЗАТЕЛЬНОЕ)
Основной алгоритм программы
Рисунок А.1 – Основной алгоритм программы
Вышеуказанный алгоритм основной программы реализует защиту от запуска второй копии приложения. Если копия приложения уже запущена (найдены ее окна) – программа активизирует свою предыдущую копию и завершает работу, иначе – стандартное выполнение программы.
Рисунок А.2 – Алгоритм проверки регистрации по имени и номеру подкаталога
Вышеуказанный алгоритм реализует проверку и регистрацию файла в отчете. Этот метод отчета применяется к каждому найденному файлу в контролируемых каталогах.
Рисунок А.3 – Главная функция для проверки каталогов и подготовки отчета
Вышеуказанный алгоритм реализует полный механизм проверки контролируемых каталогов и подготовки отчета. В алгоритме предусмотрены механизмы для досрочного завершения проверки по признаку завершения родительского потока, а также перезапуск проверки по признаку изменения файлов (от потока контроля файлов)
Рисунок А.4 – Главная функция потока проверки файлов
Вышеуказанный алгоритм реализует работу потока проверки файлов. Вызовы методов потока CheckStep и SetLists синхронизируются с главным VCL-потоком программы. Проверка файлов с передачей отчета главному окну программы инициируется взведением события NeverEvent - потоком контроля файлов по факту изменения состава файлов. Также предусмотрен механизм завершения потока – взведением свойства Terminated и события NeverEvent.
Приложение Б
(ОБЯЗАТЕЛЬНОЕ)
Листинги программы
Файл проекта FileNames.cpp
//---------------------------------------------------------------------------
#include
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("FMain.cpp", FForm);
USEFORM("FSelectDirForm.cpp", SDForm);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
//защита от повторного запуска
HWND w=FindWindow("TFForm","Контроль одноименных файлов"),
w2=FindWindow("TSDForm","Выбор каталога");
if(w) {//при обнаружении запущенной копии приложения - активизирует
//ее главное окно и завершает работу
if(IsWindowVisible(w)) {
if(w2 && IsWindowVisible(w2)) SetForegroundWindow(w2);
else SetForegroundWindow(w);
}
else PostMessage(w,WM_USER+2,0,0);
}
else{ //иначе - стандартное выполнение программы
Application->Initialize();
Application->CreateForm(__classid(TFForm), &FForm);
Application->CreateForm(__classid(TSDForm), &SDForm);
Application->Run();
}
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
Файл ArrayTemplate.h
//---------------------------------------------------------------------------
#ifndef ArrayTemplateH
#define ArrayTemplateH
//---------------------------------------------------------------------------
//шаблон на динамический массив со свойствами коллекции(списка элементов)
template class TArray
{
private:
int fCount,fLength; //кол-во элементов,размер массива
T *fItems; //указатель на массив
protected:
T __fastcall Get(int Index); //чтение элемента массива
void __fastcall Put(int Index, T Item); //запись элемента массива
void __fastcall SetCount(int NewCount); //установка fCount
public:
TArray(int aLength); //конструктор
~TArray(void); //деструктор
void __fastcall Insert(int Index,T Item);//вставка элемента
void __fastcall Delete(int Index); //удаление элемента
void __fastcall Add(T Item); //добавление элемента
void __fastcall Clear(void); //удаление всех элементов