лабораторные Тимофеев / 3316_Кирейкова_Лабораторная1
.1.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра Вычислительной техники
ОТЧЕТ по лабораторной работе №1 (задание 1)
по дисциплине «Операционные системы»
ТЕМА: УПРАВЛЕНИЕ ФАЙЛОВОЙ СИСТЕМОЙ
Студент гр. 3316 |
|
Кирейкова С.А. |
|
Преподаватель |
|
Тимофеев А.В. |
|
|
|||
|
|
|
|
Санкт-Петербург
2025
Цель работы: исследовать управление файловой системой с помощью Win32 API.
Ход работы:
1. Проверка работоспособности программы:
Главное меню (рис. 1):
Рисунок 1
Получим список дисков (пункт 1) (рис. 2), окажемся в меню дисков:
Рисунок 2
Выберем диск под номером 1 (диск C:\) (меню дисков: пункт 2) (рис. 3):
Рисунок 3
Посмотрим информацию о диске (пункт 1) (рис. 4):
Рисунок 4
Посмотрим информацию о свободном пространстве на диске (пункт 2) (рис.5):
Рисунок 5
Вернемся в главное меню (меню дисков: пункт 1)(рис.6):
Рисунок 6
Создадим директорию «NewDirectory» (рис. 7) (пункт 6). Проверим, создала ли программа директорию (рис. 8)
Рисунок 7
Рисунок 8
Удалим созданную нами ранее директорию «NewDirectory» (пункт 3) (рис.9):
Рисунок 9
Директория «NewDirectory» действительно была удалена (рис.10):
Рисунок 10
Создадим новый файл «file.txt» (пункт 4) (рис.11):
Рисунок 11 |
Проверим появился ли созданный нами файл «file.txt» (рис.12): |
Рисунок 12 |
Скопируем созданный нами ранее файл «file.txt» в файл «copy_of_file.txt» (пункт 5) (рис. 13):
Рисунок 13
И действительно, файл был успешно скопирован с помощью программы |
(рис.14): |
Рисунок 14 |
Переместим файл «file.txt» в «moved_file.txt» (пункт 6) (рис.15):
Рисунок 15 |
Убедимся, что файл был перемещен (рис.16): |
Рисунок 16 |
Посмотрим атрибуты файла «moved_file.txt» (пункт 7) (рис. 17):
Рисунок 17
Изменим атрибуты файла «moved_file.txt», установим атрибут
«READONLY» (пункт 8) (рис. 18) и проверим установился ли новый атрибут
(рис.19):
Рисунок 18
Рисунок 19
Посмотрим расширенную информацию о файле «moved_file.txt» (пункт 9) (рис.20)
Рисунок 20
Посмотрим время создания, последнего доступа, последней записи файла
«moved_file.txt» (пункт 10) (рис. 21):
Рисунок 21
Изменим время последней записи на текущее (пункт 11) (рис. 22):
Рисунок 22
Видим, что время действительно было изменено на текущей и программа сработала корректно (рис. 23):
Рисунок 23 |
Вывод
В рамках выполнения лабораторной работы №1 была реализована консольная программа, использующая функции Win32 API для управления файловой системой. В процессе работы были изучены и применены базовые функции для создания, удаления, перемещения файлов и каталогов, а также получения информации об атрибутах и временных метках файлов. Все действия выполняются через системные вызовы Windows, что позволило глубже понять механизм работы с файлами на низком уровне. Программа выполняет поставленное задание корректно, работа алгоритма отображена на скриншотах.
Текст программы:
#define NOMINMAX #include <iostream> #include <windows.h> #include <locale.h> #include <limits> #include <vector> #include <string> #include <iomanip>
void clearInputBuffer() { std::cin.clear(); // сброс ошибки ввода
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // очистка буфера
}
std::wstring InputPath() { std::wstring path; std::getline(std::wcin, path);
std::wcout <<L"Вы ввели: "<< path << std::endl;
return path;
}
void showMainMenu() {
std::cout << "\n===== МЕНЮ =====\n"; std::cout << "1. Вывод списка дисков\n"; std::cout << "2. Создать новый каталог\n"; std::cout << "3. Удалить каталог\n"; std::cout << "4. Создать файл\n"; std::cout << "5. Скопировать файл\n"; std::cout << "6. Переместить файл\n";
std::cout << "7. Посмотреть атрибуты файла\n";
std::cout << "8. Установить атрибуты файла или каталога\n"; std::cout << "9. Посмотреть расширенную информацию о файле\n"; std::cout << "10. Посмотреть время создания, последнего доступа,
последней записи \n";
std::cout << "11. Заменить время последней записи на текущее\n"; std::cout << "0. Выход\n";
std::cout << "Введите ваш выбор: ";
}
int GetQuantityOfDrivers() {
DWORD bitMask = GetLogicalDrives();
int count = 0;
for (int i = 0; i < 26; ++i) {
if (bitMask & (1 << i)) { count++;
}
}
return count;
}
void ShowDriversMenu() {
int quantity = GetQuantityOfDrivers();
int* driversnunber = new
int[quantity]; std::cout <<"\n===== МЕНЮ ДИСКОВ ===== \n"; std::cout << "1. Вернуться в главное меню\n";
for (int i = 0; i <= quantity; i++) {
std::cout << i + 1 << ". " << "Выбрать диск под номером " << ++i << std:: endl;
}
