Автор работы: Пользователь скрыл имя, 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
Федеральное государственное автономное
образовательное учреждение
высшего профессионального образования
____________Информационных технологий________
институт
________________________ _АСОИУ________________________
кафедра
КУРСОВАЯ РАБОТА
по предмету
ОПЕРАЦИОННЫЕ СИСТЕМЫ
на тему «Работа с атрибутами файлов»
Вариант № 11
Преподаватель
Студент __________
2012
Содержание
Функция создания нового файла, открытия существующего файла или каталога 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.
BOOL CloseHandle(
HANDLE hObject
);
Параметр:
HObject – идентификатор закрываемого объекта.
Возвращаемые значения:
1. При успешном завершении функция возвращает значение TRUE.
2. Если функция заканчивается аварийно, возвращаемое значение = FALSE. Чтобы получить расширенную информацию об ошибке, необходимо вызвать функцию GetLastError.
DWORD GetFileSize (
HANDLE hFile,
LPDWORD lpFileSizeHigh
);
Параметры:
hFile – идентификатор объекта, размер которого необходимо определить;
lpFileSizeHigh – адрес старшего слова для размера объекта.
Возвращаемые значения:
1. При успешном завершении
функция возвращает младшее
32-разрядное слово 64-разрядного
размера объекта. Старшее слово
размера объекта записывается
в переменную типа DWORD, адрес
которой передается функции
2. Если функция заканчивается аварийно, возвращаемое значение = 0xFFFFFFFF, при этом в слово, адрес которого задается параметром lpFileSizeHigh, записывается значение NULL. Чтобы получить расширенную информацию об ошибке, необходимо вызвать функцию GetLastError.
DWORD GetFileAttributes (
LPCTSTR lpFileName
);
Параметр:
lpFileName – указатель на строку с нулевым символом в конце, которая определяет полный или частичный путь к объекту.
Возвращаемое значение:
1. При успешном завершении
функция возвращает слово, значение
которого является логической
комбинацией следующих
FILE_ATTRIBUTE_ARCHIVE (объект был архивирован),
FILE_ATTRIBUTE_COMPRESSED (объект динамически сжимается при записи и восстанавливается при чтении),
FILE_ATTRIBUTE_NORMAL (остальные атрибуты не установлены), FILE_ATTRIBUTE_HIDDEN (скрытый объект),
FILE_ATTRIBUTE_READONLY (объект можно только читать),
FILE_ATTRIBUTE_SYSTEM (объект является частью операционной системы).
BOOL SetFileAttributes (
LPCTSTR lpFileName,
DWORD dwFileAttributes
);
Параметры:
lpFileName – указатель на строку с нулевым символом в конце, которая определяет полный или частичный путь к объекту;
dwFileAttributes – слово, значение которого является логической комбинацией атрибутов объекта.
Возвращаемые значения:
1. При успешном завершении функция возвращает значение TRUE.
2. Если функция заканчивается аварийно, возвращаемое значение = FALSE. Чтобы получить расширенную информацию об ошибке, необходимо вызвать функцию GetLastError.
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.
Задание на курсовую работу
1. Разработать приложение Win32 (API, MFC), с помощью которого можно:
- получить атрибуты файла (функция GetFileAttributes) и изменить атрибуты файла (функция SetFileAttributes);
- определить размер файла (функция GetFileSize);
- определить дату и время создания, последнего доступа и последней записи данных в файл (функция GetFileTime);
- получить информацию о файле по его идентификатору (функция GetFileInformationByHandle).
2. Все действия должны производиться по командам пользователя: из меню, либо расположенными в окне приложения кнопками.
3. Полученные результаты
Все необходимые возможности программы реализованы в двух функциях: OnChangeattr() и OnOpenfile(). Алгоритмы работы данных функций представлены на рисунках 1 и 2. С помощью первой функции происходит изменение атрибутов выбранного файла, с помощью второй – получение и вывод на форму всей необходимой информации о файле.
Рисунок 1. Блочная схема алгоритма функции OnChangeattr()
Рисунок 2. Блочная схема алгоритма функции OnOpenfile()
Основная логика программы находится в файле 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)->
GetDlgItem(IDC_CHECK2)->
GetDlgItem(IDC_CHECK3)->
GetDlgItem(IDC_CHECK4)->
GetDlgItem(IDC_CHECK5)->
GetDlgItem(IDC_CHECK6)->
GetDlgItem(IDC_CHANGEATTR)->
//Сбрасываем флажки для выбора атрибутов файла
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);
//Получаем атрибуты файла
с помощью функции
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("
m_attriblist.AddString(" - Атрибуты файла:");
if (dwAttr&FILE_ATTRIBUTE_
if (dwAttr&FILE_ATTRIBUTE_
if (dwAttr&FILE_ATTRIBUTE_HIDDEN) { m_check3 = TRUE; m_attriblist.AddString(" * Скрытый объект"); }
if (dwAttr&FILE_ATTRIBUTE_NORMAL)
if (dwAttr&FILE_ATTRIBUTE_
if (dwAttr&FILE_ATTRIBUTE_SYSTEM)
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("
m_attriblist.AddString("");
m_attriblist.AddString(buf);
}
//////////////////////////////
//Находим дату и время файла с помощью функции GetFileTime()
FILETIME lpCreationTime, lpLastAccessTime, lpLastWriteTime;
if (GetFileTime(hFile, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime))
{
//Если ошибки нет, то
выводим результат работы
CTime CreationTime(lpCreationTime); //Передаем полученное время в объекты класса CTime, чтобы удобно было выводить
CTime LastAccessTime(
CTime LastWriteTime(lpLastWriteTime)
m_attriblist.AddString("");
m_attriblist.AddString("Резуль
m_attriblist.AddString("");
m_attriblist.AddString(
m_attriblist.AddString(
m_attriblist.AddString(
}
else
{
MessageBox("Ошибка");
}
//////////////////////////////
//Выводим информацию о файле с помощью функции GetFileInformationByHandle()
m_attriblist.AddString("");
m_attriblist.AddString("
m_attriblist.AddString("");
BY_HANDLE_FILE_INFORMATION FileInformation;
if (GetFileInformationByHandle(
{
//Если ошибки нет, то
выводим результат работы
//Выводим атрибуты файла
m_attriblist.AddString(" - Атрибуты файла:");
if (FileInformation.
if (FileInformation.
if (FileInformation.
if (FileInformation.
if (FileInformation.
if (FileInformation.
//Выводим размер файла
__int64 dwSize; //"Собираем" размер файла из двух слов (это необходимо для больших файлов)
dwSize=FileInformation.
dwSize<<=32;
dwSize+=FileInformation.
CString buf;
buf.Format(" - Размер файла: %I64d байт", dwSize);
m_attriblist.AddString("");
m_attriblist.AddString(buf);
//Выводим время и дату на форму
CTime CreTime(FileInformation.
CTime LATime(FileInformation.
CTime LWTime(FileInformation.
m_attriblist.AddString("");
m_attriblist.AddString(