Работа с атрибутами файлов

Автор работы: Пользователь скрыл имя, 26 Июня 2014 в 11:53, курсовая работа

Краткое описание

Функция создания нового файла, открытия существующего файла или каталога CreateFile:
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile

Содержание

1 Теоретический материал 3
1.1 Универсальная функция CreateFile() 3
1.2 Функция закрытия файла CloseHandle() 4
1.3 Функция определения размера объекта GetFileSize() 4
1.4 Функция определения атрибутов объекта GetFileAttributes() 5
1.5 Функция установки атрибутов объекта SetFileAttributes() 6
1.6 Функция получения времени объекта GetFileTime() 6
2 Исходные данные 8
3 Практическая часть 9
3.1 Алгоритмы, описывающие работу программы 9
3.2 Тексты исходных модулей и заголовочных файлов 11
4 Контрольный пример 16
Список использованной литературы 17

Прикрепленные файлы: 1 файл

11 вар.doc

— 146.00 Кб (Скачать документ)

Федеральное государственное автономное

образовательное учреждение

высшего профессионального образования

 

____________Информационных  технологий________

институт

________________________   _АСОИУ_____________________________

кафедра

 

 

 

 

 

 

 

 

 

 

КУРСОВАЯ РАБОТА

по предмету

 

ОПЕРАЦИОННЫЕ СИСТЕМЫ

на тему «Работа с атрибутами файлов»

Вариант № 11

 

 

 

 

 

 

 

 

 

 

Преподаватель                         __________              

                                                              подпись, дата                           инициалы, фамилия

 

         Студент                                 __________  

                                      номер группы        номер зачетной книжки         подпись, дата      инициалы, фамилия

 

 

 

 

 

 

 

 

2012 

Содержание

 

 

1 Теоретический материал

1.1 Универсальная функция CreateFile()

Функция создания нового файла, открытия существующего файла или каталога CreateFile:

HANDLE CreateFile( 

LPCTSTR lpFileName, 

DWORD dwDesiredAccess, 

DWORD dwShareMode, 

LPSECURITY_ATTRIBUTES lpSecurityAttributes, 

DWORD dwCreationDistribution, 

DWORD dwFlagsAndAttributes, 

HANDLE hTemplateFile 

); 

Функция CreateFile создает или открывает объекты (файлы, конвейеры и  пр.)  и  возвращает  дескриптор,  который  может  использоваться  при обращении к объекту.

Параметры:

lpFileName - указатель на строку с  нулевым символом в конце, которая  определяет  имя  создаваемого  или  уже  существующего  объекта  (файл, конвейер, mailslot, ресурс связи, дисковое устройство, пульт, или каталог). 

dwDesiredAccess  - определяет тип доступа  к открываемому объекту.

DwShareMode - набор битовых флажков, которые определяют режимы совместного  использования  открываемого  или  создаваемого  объекта.

lpSecurityAttributes - указатель на дескриптор  защиты или  NULL, если этот дескриптор  не используется.

DwCreationDistribution  -  определяет  действия  функции,  если приложение пытается  создать объект, который уже существует.

DwFlagsAndAttributes  - определяет атрибуты и флаги для объекта.

HTemplateFile  -  определяет  дескриптор  к  файлу  шаблона.  Файл шаблона  обеспечивает  атрибуты  файла  и  расширенные  атрибуты  для создаваемого файла.

Возвращаемые значения:

1.  Если  функция  заканчивается  успешно,  возвращаемое  значение  - идентификатор созданного или  открытого объекта. 

2.  Если  функция  заканчивается  аварийно,  возвращаемое  значение INVALID_HANDLE_VALUE.  Чтобы  получить  расширенную информацию  об  ошибке,  необходимо  вызвать  функцию GetLastError.

1.2 Функция закрытия файла CloseHandle()

BOOL CloseHandle(

HANDLE hObject 

);

Параметр:

HObject – идентификатор закрываемого объекта.

Возвращаемые значения:

1.  При успешном завершении функция возвращает значение TRUE.

2.  Если  функция  заканчивается  аварийно,  возвращаемое  значение  = FALSE. Чтобы  получить  расширенную  информацию  об  ошибке, необходимо  вызвать функцию GetLastError.

1.3 Функция определения размера  объекта GetFileSize()

DWORD GetFileSize ( 

HANDLE hFile, 

LPDWORD lpFileSizeHigh 

); 

Параметры:

hFile  –  идентификатор  объекта,  размер  которого  необходимо  определить;

lpFileSizeHigh – адрес старшего слова  для размера объекта. 

Возвращаемые значения:

1.  При  успешном  завершении  функция  возвращает  младшее  32-разрядное  слово  64-разрядного  размера  объекта.  Старшее  слово  размера объекта записывается  в переменную типа  DWORD, адрес  которой передается функции через  параметр lpFileSizeHigh.

2. Если  функция  заканчивается  аварийно,  возвращаемое  значение  = 0xFFFFFFFF, при этом в слово, адрес которого задается параметром lpFileSizeHigh,  записывается  значение  NULL.  Чтобы  получить расширенную  информацию  об  ошибке,  необходимо  вызвать функцию GetLastError.

1.4 Функция определения атрибутов  объекта GetFileAttributes()

DWORD GetFileAttributes ( 

LPCTSTR lpFileName

); 

Параметр:

lpFileName – указатель на строку  с нулевым символом в конце, которая определяет полный или  частичный путь к объекту.

Возвращаемое значение:

1.  При  успешном  завершении  функция  возвращает  слово,  значение  которого является логической  комбинацией следующих атрибутов:

FILE_ATTRIBUTE_ARCHIVE  (объект  был  архивирован),

FILE_ATTRIBUTE_COMPRESSED  (объект динамически сжимается при  записи  и  восстанавливается  при  чтении),

FILE_ATTRIBUTE_NORMAL  (остальные  атрибуты  не установлены),  FILE_ATTRIBUTE_HIDDEN  (скрытый  объект),

FILE_ATTRIBUTE_READONLY  (объект  можно  только  читать),

FILE_ATTRIBUTE_SYSTEM  (объект  является  частью операционной системы).

 

1.5 Функция установки атрибутов объекта SetFileAttributes()

BOOL SetFileAttributes ( 

LPCTSTR lpFileName,

DWORD  dwFileAttributes

); 

Параметры:

lpFileName – указатель на строку  с нулевым символом в конце, которая определяет полный или частичный путь к объекту;

dwFileAttributes  –  слово,  значение  которого  является  логической  комбинацией атрибутов объекта.

Возвращаемые значения:

1.  При успешном завершении  функция возвращает значение TRUE.

2.  Если  функция  заканчивается  аварийно,  возвращаемое  значение  = FALSE. Чтобы  получить  расширенную  информацию  об  ошибке, необходимо вызвать функцию GetLastError.

1.6 Функция получения времени объекта GetFileTime()

BOOL GetFileTime ( 

HANDLE hFile,

LPFILETIME lpCreationTime, 

LPFILETIME lpLastAccessTime, 

LPFILETIME lpLastWriteTime

); 

Параметры:

hFile  – идентификатор объекта, для которого выполняется получение  времени объекта;

lpCreationTime – адрес структуры типа FILETIME, содержащей дату и время создания объекта; 

lpLastAccessTime – адрес структуры  типа FILETIME, содержащей дату и время  момента последнего доступа к  объекту; 

lpLastWriteTime – адрес структуры типа FILETIME, содержащей дату и время  момента, когда последний раз  выполнялась запись данных в объект.  Структура  FILETIME хранит  64-разрядное значение даты и времени в виде количества интервалов размером 100 наносекунд от 1 января 1601 года и определена следующим образом: 

typedef struct _FILETIME {

DWORD dwLowDateTime;  // младшее слово

DWORD dwLowDateTime;  // старшее слово

} FILETIME;

Возвращаемые значения:

1.  При успешном завершении  функция возвращает значение TRUE.

2.  Если  функция  заканчивается  аварийно,  возвращаемое  значение  = FALSE. Чтобы  получить  расширенную  информацию  об  ошибке, необходимо вызвать функцию GetLastError.

 

2 Исходные данные

Задание на курсовую работу

1. Разработать  приложение  Win32  (API,  MFC),  с  помощью  которого  можно:

-  получить  атрибуты  файла  (функция  GetFileAttributes)  и  изменить атрибуты файла (функция SetFileAttributes);

-  определить размер файла (функция GetFileSize);

- определить дату и время  создания, последнего доступа и  последней записи данных в  файл (функция GetFileTime);

-  получить  информацию  о  файле  по  его  идентификатору  (функция GetFileInformationByHandle).

2. Все  действия  должны  производиться  по  командам  пользователя: из  меню, либо расположенными в окне  приложения кнопками.

3. Полученные результаты действий  вывести на экран монитора.

 

 

3 Практическая часть

3.1 Алгоритмы, описывающие работу программы

Все необходимые возможности программы реализованы в двух функциях: OnChangeattr() и OnOpenfile(). Алгоритмы работы данных функций представлены на рисунках 1 и 2. С помощью первой функции происходит изменение атрибутов выбранного файла, с помощью второй – получение и вывод на форму всей необходимой информации о файле.

 


 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 1. Блочная схема алгоритма функции OnChangeattr()

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 2. Блочная схема алгоритма функции OnOpenfile()

 

3.2 Тексты исходных модулей и заголовочных файлов

Основная логика программы находится в файле FileAttribDlg.cpp. Ниже приведен листинг функции OnOpenfile() и OnChangeattr().

 

//Функция, срабатывающая  при выборе файла

void CFileAttribDlg::OnOpenfile()

{

static char BASED_CODE szFilter[] = "|All Files (*.*)|*.*||";

//Открываем диалоговое  окно для выбора файла

CFileDialog of( TRUE/*диалог открытия файла*/,

NULL/*директория по умолчанию*/,

NULL/*файл по умолчанию*/,

OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

szFilter,

NULL );

if (of.DoModal() == IDOK){ //Если файл  был выбран

//Делаем активными флажки  для выбора атрибутов файла

GetDlgItem(IDC_CHECK1)->EnableWindow();

GetDlgItem(IDC_CHECK2)->EnableWindow();

GetDlgItem(IDC_CHECK3)->EnableWindow();

GetDlgItem(IDC_CHECK4)->EnableWindow();

GetDlgItem(IDC_CHECK5)->EnableWindow();

GetDlgItem(IDC_CHECK6)->EnableWindow();

GetDlgItem(IDC_CHANGEATTR)->EnableWindow();

//Сбрасываем флажки для  выбора атрибутов файла

m_check1 = FALSE;

m_check2 = FALSE;

m_check3 = FALSE;

m_check4 = FALSE;

m_check5 = FALSE;

m_check6 = FALSE;

m_editfile = of.GetPathName(); //Получаем  имя выбранного файла

UpdateData(FALSE);

//Открываем выбранный  файл

HANDLE hFile;

hFile = CreateFile(m_editfile, NULL, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

//Получаем атрибуты файла  с помощью функции GetFileAttributes()

DWORD dwAttr = GetFileAttributes(m_editfile); 

if(dwAttr == 0xffffffff) 

DWORD dwError = GetLastError(); 

if(dwError == ERROR_FILE_NOT_FOUND) 

MessageBox("Ошибка"); 

}    

else 

//Если ошибки нет, то  выводим результат работы функции  на форму

m_attriblist.ResetContent();

m_attriblist.AddString("Результат работы функции GetFileAttributes()");

m_attriblist.AddString("  - Атрибуты  файла:");

if (dwAttr&FILE_ATTRIBUTE_ARCHIVE)  { m_check1 = TRUE; m_attriblist.AddString("    * Объект был архивирован"); }

if (dwAttr&FILE_ATTRIBUTE_COMPRESSED) { m_check2 = TRUE; m_attriblist.AddString("    * Объект динамически сжимается при записи и восстанавливается при чтении"); }

if (dwAttr&FILE_ATTRIBUTE_HIDDEN)   { m_check3 = TRUE; m_attriblist.AddString("    * Скрытый объект"); }

if (dwAttr&FILE_ATTRIBUTE_NORMAL)  { m_check4 = TRUE; m_attriblist.AddString("    * Атрибуты не установлены"); }

if (dwAttr&FILE_ATTRIBUTE_READONLY)  { m_check5 = TRUE; m_attriblist.AddString("    * Объект можно только читать"); }

if (dwAttr&FILE_ATTRIBUTE_SYSTEM)  { m_check6 = TRUE; m_attriblist.AddString("    * Объект является частью операционной системы"); }

UpdateData(FALSE);

////////////////////////////////////////////////////////////////

//Находим размер файла  с помощью функции GetFileSize(

DWORD dwSizeLow, dwSizeHigh;

dwSizeLow = GetFileSize(hFile, &dwSizeHigh);

DWORD dwError;

if (dwSizeLow == INVALID_FILE_SIZE

&&

(dwError = GetLastError()) != NO_ERROR )

{

MessageBox("Ошибка");

}

else

{

//Если ошибки нет, то  выводим результат работы функции на форму

__int64 dwSize; //"Собираем" размер файла из двух слов (это необходимо для больших файлов)

dwSize=dwSizeHigh;

dwSize<<=32;

dwSize+=dwSizeLow;

CString buf;

buf.Format("  - Размер файла %I64d байт", dwSize);

m_attriblist.AddString("");

m_attriblist.AddString("Результат  работы функции GetFileSize()");

m_attriblist.AddString("");

m_attriblist.AddString(buf);

}

////////////////////////////////////////////////////////////////

//Находим дату и время файла с помощью функции GetFileTime()

FILETIME lpCreationTime, lpLastAccessTime, lpLastWriteTime;

if (GetFileTime(hFile, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime))

{

//Если ошибки нет, то  выводим результат работы функции  на форму

CTime CreationTime(lpCreationTime); //Передаем полученное время в объекты класса CTime, чтобы удобно было выводить

CTime LastAccessTime(lpLastAccessTime);

CTime LastWriteTime(lpLastWriteTime);

m_attriblist.AddString("");

m_attriblist.AddString("Результат работы функции GetFileTime()");

m_attriblist.AddString("");

m_attriblist.AddString(CreationTime.Format("  - Дата и время создания файла: %d.%m.%Y, %H:%M:%S")); 

m_attriblist.AddString(LastAccessTime.Format("  - Дата и время момента последнего доступа к файлу: %d.%m.%Y, %H:%M:%S"));  

m_attriblist.AddString(LastWriteTime.Format("  - Дата и время момента последней  записи в файл: %d.%m.%Y, %H:%M:%S"));

}

else

{

MessageBox("Ошибка");

}

/////////////////////////////////////////////////////////////////

//Выводим информацию о  файле с помощью функции GetFileInformationByHandle()

m_attriblist.AddString("");

m_attriblist.AddString("Результат  работы функции GetFileInformationByHandle()");

m_attriblist.AddString("");

BY_HANDLE_FILE_INFORMATION FileInformation;

if (GetFileInformationByHandle(hFile, &FileInformation))

{

//Если ошибки нет, то  выводим результат работы функции  на форму

//Выводим атрибуты файла

m_attriblist.AddString("  - Атрибуты файла:");

if (FileInformation.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) { m_attriblist.AddString("    * Объект был архивирован"); }

if (FileInformation.dwFileAttributes&FILE_ATTRIBUTE_COMPRESSED) { m_attriblist.AddString("    * Объект динамически сжимается при записи и восстанавливается при чтении"); }

if (FileInformation.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN)  { m_attriblist.AddString("    * Скрытый объект"); }

if (FileInformation.dwFileAttributes&FILE_ATTRIBUTE_NORMAL)  { m_attriblist.AddString("    * Атрибуты не установлены"); }

if (FileInformation.dwFileAttributes&FILE_ATTRIBUTE_READONLY) { m_attriblist.AddString("    * Объект можно только читать"); }

if (FileInformation.dwFileAttributes&FILE_ATTRIBUTE_SYSTEM)  { m_attriblist.AddString("    * Объект является частью операционной системы"); }   

//Выводим размер файла

__int64 dwSize; //"Собираем" размер файла из двух слов (это необходимо для больших файлов)

dwSize=FileInformation.nFileSizeHigh;

dwSize<<=32;

dwSize+=FileInformation.nFileSizeLow;

CString buf;

buf.Format("  - Размер файла: %I64d байт", dwSize);

m_attriblist.AddString("");

m_attriblist.AddString(buf);

//Выводим время и дату  на форму

CTime CreTime(FileInformation.ftCreationTime); //Передаем полученное время в объекты класса CTime, чтобы удобно было выводить

CTime LATime(FileInformation.ftLastAccessTime);

CTime LWTime(FileInformation.ftLastWriteTime );

m_attriblist.AddString("");

m_attriblist.AddString(CreTime.Format("  - Дата и время создания файла: %d.%m.%Y, %H:%M:%S"));  

Информация о работе Работа с атрибутами файлов