У вас вопросы?
У нас ответы:) SamZan.net

на тему Работа с атрибутами файлов Вариант 11 Преподаватель

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 29.12.2024

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

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

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

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

институт

________________________   _АСОИУ_____________________________

кафедра

   

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

по предмету

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

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

Вариант № 11

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

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

        Студент                                 __________   

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

2012


Содержание

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

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

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

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

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

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

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

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

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

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

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

[4]
4 Контрольный пример

[5]
Список использованной литературы


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"));  

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

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

 }

 else

 {

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

 }

 CloseHandle(hFile);

 }

}

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

void CFileAttribDlg::OnChangeattr()

{

UpdateData(TRUE);

DWORD dwAttr = FILE_ATTRIBUTE_NORMAL;

 //Заполняем новые атрибуты файла из флажков на форме

 if(m_check1) { dwAttr |= FILE_ATTRIBUTE_ARCHIVE; }

if(m_check2) { dwAttr |= FILE_ATTRIBUTE_COMPRESSED; }

if(m_check3) { dwAttr |= FILE_ATTRIBUTE_HIDDEN;  }

if(m_check4) { dwAttr |= FILE_ATTRIBUTE_NORMAL;  }

if(m_check5) { dwAttr |= FILE_ATTRIBUTE_READONLY; }

if(m_check6) { dwAttr |= FILE_ATTRIBUTE_SYSTEM;  }

//Изменяем атрибуты файла

if (SetFileAttributes(m_editfile, dwAttr))

{

 MessageBox("Атрибуты файла изменены");

}

else

{

 MessageBox("Атрибуты файла не были изменены");

 }

}


4 Контрольный пример

Для контрольного примера был использован файл «Новосибирск.rar», размер которого превышает 11 Гб. Результат работы программы представлен на рисунке 3.

Рисунок 3. Основная форма программы


Список использованной литературы

1.  Баженова,  И.Ю.  Visual  C++  6.0  (Visual  Studio  98)  /  И.Ю. Баженова. М.: ДИАЛОГ-МИФИ, 1999. 407 с.

2.  Фролов, А. В.  Microsoft  Visual  C++ и  MFC. Программирование для  Windows  95 и  Windows  NT  / А. В. Фролов, Г. В. Фролов. М.: Диалог-МИФИ, 1997. 272 с.

3.  Ахо,  А.В.  Структуры  данных  и  алгоритмы  /  А.В.  Ахо,  Дж.Э. Хопкрофт, Дж.Д. Ульман. М: Вильямс, 2000. 286 с.

4.  Вирт, Н. Алгоритмы и структуры данных  / Н. Вирт. М.: Мир, 1989. 267 с.

5.  Кнут, Д.Э. Искусство программирования: В  3т. Т.  1 Основные алгоритмы / Д.Э. Кнут. Изд. 3-е М: Вильямс, 2000.

22




1. Астана медицина университеті А~ Нысан С~Ж 07
2. Ребенок, переживший насилие
3. Ю Монолог Поверь ничтожество есть благо в здешнем свете
4. Контрольная работа по дисциплине- Земельное право Вариант 1 Выполнил- Да
5. Та~ырыбы Инерция моментін аны~тау ж~не Штейнер теоремасын тексер
6. тема. Воздействие средств физической культуры и спорта природных социальных и экологических факторов на ор.html
7. Граждане как субъекты административного прав
8. тематичность исследований
9. Судебное доказывание
10. тема государства- основные понятия принципы построения
11. Отче наш решил наконец увидеть город Приама еще ребенком он дал себе слово когданибудь откопать Трою
12. й тур 17 января ТВЕНТЕ - ХЕРАКЛЕС 3-1 1-0
13. .каф.проф. Сапрыкин В
14. Задание- 1Отразить на дату государственной регистрации задолженность по денежным взносам учредителей; 2
15. Учетный цикл. Корректировочные записи как метод реализации правила соответствия
16. реферат дисертації на здобуття наукового ступеня доктора біологічних наук Київ
17. ru Все книги автора Эта же книга в других форматах Приятного чтения Ричард Матесон Невероятный
18. ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовому проекту по дисциплине Инженерное благоустройство жилой группы
19. реферат дисертації на здобуття наукового ступеня кандидата медичних наук Київ ~ 2001 Дисерта.html
20. У фокусі Microsoft Virtual Server 2005