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

Разработка приложения Win32, с помощью которого можно получить атрибуты файла (функция GetFileAttributes). Определение даты и времени создания, последнего доступа и последней записи данных в файл. Получение информации о файле по его идентификатору.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 27.06.2014
Размер файла 187,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

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

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

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

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

АСОИУ

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

по предмету

Операционные системы

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

Вариант № 11

2012

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

Размещено на Allbest.ru


Подобные документы

  • Создание программного продукта на языке Pascal в визуальной среде программирования Borland Developer Studio в консольном приложении. Разработка типизированного файла для записи данных и их вывод на экран, добавление данных в конец файла, поиск информации.

    курсовая работа [1,0 M], добавлен 04.12.2011

  • Общие характеристики операционной системы Android. Разработка приложения на основе создания менеджера файлов. Получение с помощью приложения доступа к файлам, хранящимся в "облачном хранилище" в сети Интернет. Расчет стоимости программного обеспечения.

    дипломная работа [2,7 M], добавлен 03.04.2015

  • Сущность текстовых файлов последовательного и произвольного доступа. Вывод документа WordPad на печать, возможности добавления в документ даты, времени, фрагмента текста. Понятие диаграмм классов и последовательностей, создание формы. Программный код.

    курсовая работа [38,2 K], добавлен 14.10.2011

  • Разработка удаленной базы данных и приложения-клиента для доступа к электронным источникам литературы, содержащихся на жестком диске сервера предприятия в виде упакованных архивов файлов и пакетов файлов. Реляционное исчисление доменов. Средства Delphi.

    дипломная работа [2,7 M], добавлен 24.03.2011

  • Работа с файлами на языке Pascal. Типы файлов: типизированные, текстовые, нетипизированные. Сущность процедуры и функции. Использование процедуры Read и Write для операций чтения и записи в типизированном файле. Листинг программы и экранные формы.

    лабораторная работа [38,4 K], добавлен 13.02.2009

  • Запуск программы из среды Turbo C 2.0. Число строк в файле. Формирование алфавитного порядка. Метод линейного поиска. Функциональная структура программы. Структура записи файла. Последовательный просмотр элементов таблицы. Информация о входном файле.

    курсовая работа [688,6 K], добавлен 13.03.2013

  • Разработка исполняемого Win32 приложения с визуальным интерфейсом, обеспечивающим построение функций принадлежности. Проектирование визуального интерфейса приложения, включающего кнопки доступа к функциям построения графика, полей ввода исходных данных.

    дипломная работа [343,8 K], добавлен 06.06.2010

  • Встроенные структуры данных, связанные с датами и временем. Системное время в секундах. Представление текущего времени в строку. Изменение даты и времени модификации файла. Установка системной даты и времени по секундам. Работа с системными часами.

    методичка [28,2 K], добавлен 06.07.2009

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

    реферат [14,5 K], добавлен 06.12.2011

  • Разработка шаблона для работы с двоичным файлом, в котором хранится структура данных (двоичное дерево объектов). Представление двоичного дерева в файле. Вставка объекта в дерево, его удаление. Алгоритм сжатия файла. Описание пользовательского интерфейса.

    курсовая работа [1,1 M], добавлен 26.01.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.