Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод1 спо.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
226.72 Кб
Скачать

Требования к программе:

  1. Необходимо определить список всех логических дисков в системе.

  2. Необходимо учесть наличие нескольких жестких дисков на компьютере.

  3. Имена логических дисков должны совпадать с именами дисков в системе.

  4. Для каждого логического диска определить: тип файловой системы, начало диска, его размер.

Варианты заданий

  1. Определить активные разделы жесткого диска.

  2. Вывести неиспользуемые разделы в каждой MBR.

  3. Определить количество MBR в системе.

  4. Для каждого логического диска вывести его серийный номер (из ВООТ-сектора).

  5. Для каждого логического диска определить размер сектора (из ВООТ-сектора).

  6. Для каждого логического диска определить размер кластера (из ВООТ-сектора).

  7. Для каждого расширенного раздела вывести его относительный номер сектора.

  8. Для каждого расширенного раздела вывести его размер.

  9. Подсчитать количество используемых разделов в каждой MBR.

  10. Для логических дисков с файловой системой FATвывести размер FAT.

  11. Для логических дисков с файловой системой FATвывести метку тома.

  12. Для логических дисков с файловой системой NTFSвывести размер записи MFT.

  13. Для каждого расширенного раздела вывести его абсолютный номер сектора.

  14. Для активных разделов вывести CHS-адрес начала раздела.

  15. Для активных разделов вывести CHS-адрес конца раздела.

Вопросы к защите

  1. Назначение MBR, его структура и расположение на диске

  2. Расширенный раздел. Назначение, расположение на диске

  3. Структура партиции Partition Table

  4. Алгоритм именования дисков

  5. Просмотр MBR нескольких жестких дисков

Лабораторная работа №4 Применение функций Windows api для поиска и работы с файлами и каталогами

Цель работы: Получить практические навыки в использований функций Win32 API для работы с файлами и каталогами

Теоретические сведения

Наиболее часто используемые функции Win32 API для работы с файлами и каталогами:

Поиск первого из файлов, удовлетворяющих маске

HANDLE FindFirstFile (LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindData)

Первый параметр – маска файлов с полным путем. Маска может включать * (любое количество символов)и ? (один любой символ).

Например: ?ф*.* - все файлы со второй буквой ф.

С:\*.*

Второй параметр – адрес структуры, в которой будет информация о найденном файле.

typedef struct _WIN32_FIND_DATA {

DWORD    dwFileAttributes;

FILETIME ftCreationTime;

FILETIME ftLastAccessTime;

FILETIME ftLastWriteTime;

DWORD    nFileSizeHigh;

DWORD    nFileSizeLow;

DWORD    dwReserved0;

DWORD    dwReserved1;

TCHAR    cFileName[MAX_PATH];

TCHAR    cAlternateFileName[14];

}

Наиболее часто встречающиеся атрибуты файлов:

FILE_ATTRIBUTE_DIRECTORY 16 (0x10)

FILE_ATTRIBUTE_HIDDEN 2(0x2)

FILE_ATTRIBUTE_READONLY 1 (0x1)

FILE_ATTRIBUTE_SYSTEM 4 (0x4)

Структура содержит 3 временных штампа – дата создания, последнего использования и редактирования. Структура FILETIME может быть конвертирована функцией  FileTimeToSystemTime для удобного вывода на экран или программной работы с датой или временем.

Последнее поле – альтернативное имя файла – имя в формате 8.3.

Если функция завершается успешно, возвращаемое значение является описателем (хэндлом) поиска , используемым в последующем вызове FindNextFile или FindClose, и lpFindData параметр содержит информацию о первом найденном файле или каталоге.

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

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

Продолжение поиска файлов FindNextFile

BOOL FindNextFile(HANDLE hFindFile,LPWIN32_FIND_DATA lpFindData);

Возвращает ненулевое значение, если успешно.

Завершение поиска (освобождение описателя поиска)

BOOL FindClose(HANDLE hFindFile);

В отличие от остальных функций, которые освобождают хэндл с помощью CloseHandle.

Пример поиска файлов в заданной директории:

LPWIN32_FIND_DATA ffd;

LARGE_INTEGER filesize;

hFind = FindFirstFile(szDir, &ffd);

if (hFind !=INVALID_HANDLE_VALUE)

{ do{

if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

{ _tprintf(TEXT(" %s <DIR>\n"), ffd.cFileName);

}

else

{ filesize.LowPart = ffd.nFileSizeLow;

filesize.HighPart = ffd.nFileSizeHigh;

_tprintf(TEXT(" %s %ld bytes\n"), ffd.cFileName, filesize.QuadPart);

}

}

while (FindNextFile(hFind, &ffd) != 0);

FindClose (hFind);

Копирование файла

BOOL CopyFile (LPCSTR lpExistingFileName, LPCSTR lpNewFileName, BOOL bFail);

Копирует существующий файл, заданный первым параметром, в файл, заданный вторым параметром. Если bFail =TRUE и новый файл существует, функция завершается с ошибкой. Если этот параметр равен FALSE и новый файл существует, то функция перезаписывает его и завершается успешно.

При нормальном завершении функция возвращает ненулевое значение, иначе – ноль.

Удаление файла

BOOL DeleteFile (LPCSTR lpFileName);

Удаляет файл, заданный в параметре. При успешном выполнении возвращает TRUE

Перемещение или переименование файла

BOOL MoveFile (LPCSTR lpExistingFileName, LPCSTR lpNewFileName);

Перемещает/переименовывает существующий файл lpExistingFileName

При успешном выполнении возвращает TRUE.