Labs_Shishkina_Marina_ITb-4301/Lab1/Lab1.c
2024-12-28 15:03:30 +03:00

328 lines
9.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <windows.h>
#include <stdio.h>
#include <locale.h>
#include <tchar.h>
void printError(const wchar_t* message) {
wprintf(L"%s: %lu\n", message, GetLastError());
}
void listFilesAndDirectories(wchar_t* drivePath) {
WIN32_FIND_DATA findFileData;
//wchar_t searchPath[MAX_PATH];
//swprintf(searchPath, MAX_PATH, L"%s*", drivePath);
SetCurrentDirectory(drivePath);
HANDLE hFind = FindFirstFile(L"*", &findFileData);
if (hFind == INVALID_HANDLE_VALUE) {
wprintf(L"Ошибка доступа к директории.\n");
return;
}
wprintf(L"Список файлов и каталогов в корне %s:\n", drivePath);
do {
wprintf(L"%s\n", findFileData.cFileName);
} while (FindNextFile(hFind, &findFileData) != 0);
FindClose(hFind);
}
void deleteFileOrDirectory(wchar_t* path) {
DWORD attributes = GetFileAttributes(path);
if (attributes == INVALID_FILE_ATTRIBUTES) {
wprintf(L"Файл или каталог не найден.\n");
return;
}
if (attributes & FILE_ATTRIBUTE_DIRECTORY) {
// Удаление каталога
if (RemoveDirectory(path)) {
wprintf(L"Каталог %s успешно удален.\n", path);
}
else {
wprintf(L"Не удалось удалить каталог %s.\n", path);
}
}
else {
// Удаление файла
if (DeleteFile(path)) {
wprintf(L"Файл %s успешно удален.\n", path);
}
else {
wprintf(L"Не удалось удалить файл %s.\n", path);
}
}
}
int main()
{
setlocale(LC_ALL, "");
wprintf(L"LABA 1\n");
//GetCurrentDirectory
WCHAR buffer[MAX_PATH];
DWORD length;
// Получаем текущую директорию
length = GetCurrentDirectory(MAX_PATH, buffer);
wprintf(L"Current directory : %s\n", buffer);
//SetCurrentDirectory
SetCurrentDirectory(L"D:\\univer");
WCHAR buffer1[MAX_PATH];
DWORD length1;
// Получаем текущую директорию
length1 = GetCurrentDirectory(MAX_PATH, buffer1);
wprintf(L"Current directory after change : %s\n", buffer1);
//GetLogicalDrives
DWORD drives = GetLogicalDrives();
printf("Logical drives bitmask: 0x%lx\n", drives);
for (int i = 0; i < 26; i++) {
// Проверяем, установлен ли бит, соответствующий текущему диску
if (drives & (1 << i)) {
// Формируем имя диска (например, "C:\")
char driveName[4] = { 'A' + i, ':', '\\', '\0' };
printf(driveName);
}
}
printf("\n");
//FindFirstFile FindNextFileW FindClose
WIN32_FIND_DATA findFileData;
HANDLE hFind = FindFirstFile(L"D:\\poznanie\\*", &findFileData);;
if (hFind != INVALID_HANDLE_VALUE) {
do {
wprintf(L"Найден файл: %s\n", findFileData.cFileName);
} while (FindNextFileW(hFind, &findFileData) != 0);
// Закрываем дескриптор поиска
FindClose(hFind);
}
wchar_t dir[512] = L"D:\\poznanie"; // Укажите ваш путь
wchar_t filePath[512];
// Создание полного пути к файлу
swprintf(filePath, 512, L"%s\\example.txt", dir);
// Создание и работа с файлом
HANDLE hFile = CreateFileW(filePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Запись в файл
const char* data = "Hello, World!"; // Данные для записи
DWORD written;
if (!WriteFile(hFile, data, (DWORD)strlen(data), &written, NULL)) {
CloseHandle(hFile);
return 1;
}
// Закрытие файла
CloseHandle(hFile);
// Открытие файла для чтения
hFile = CreateFileW(filePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
return 1;
}
// Чтение из файла
char bufferRead[256]; // Буфер для чтения
DWORD read;
if (!ReadFile(hFile, bufferRead, sizeof(bufferRead) - 1, &read, NULL)) {
CloseHandle(hFile);
return 1;
}
bufferRead[read] = '\0'; // Завершаем строку
// Печать прочитанных данных
printf("Прочитанные данные: %s\n", bufferRead); // Используйте %s для char
wchar_t filePath1[256] = L"C:\\ProgramData";
wchar_t fullPath[256];
if (!GetFullPathNameW(filePath1, 256, fullPath, NULL)) {
CloseHandle(hFile);
return 1;
}
wprintf(L"Полный путь к файлу: %s\n", fullPath);
// Получение атрибутов файла
DWORD attributes = GetFileAttributesW(filePath1);
if (attributes == INVALID_FILE_ATTRIBUTES) {
CloseHandle(hFile);
return 1;
}
wprintf(L"Атрибуты файла: %lu\n", attributes);
if (attributes & FILE_ATTRIBUTE_HIDDEN) { // Проверка на скрытый атрибут
wprintf(L"Атрибуты файла: скрытый\n");
}
if (attributes & FILE_ATTRIBUTE_SYSTEM) {
wprintf(L"Атрибуты файла: Файл или каталог, часть или весь каталог которого использует операционная система.\n");
}
if (attributes & FILE_ATTRIBUTE_ARCHIVE) {
wprintf(L"Атрибуты файла: Файл или каталог, который является архивным файлом или каталогом.\n ");
}
if (attributes & FILE_ATTRIBUTE_DIRECTORY) {
wprintf(L"Атрибуты файла: Директория\n ");
}
if (attributes & FILE_ATTRIBUTE_DEVICE) {
wprintf(L"Атрибуты файла: Директория \n");
}
if (attributes & FILE_ATTRIBUTE_NORMAL) {
wprintf(L"Атрибуты файла: Файл, у которого не установлены другие атрибуты.\n ");
}
if (attributes & FILE_ATTRIBUTE_TEMPORARY) {
wprintf(L"Атрибуты файла: Файл, который используется для временного хранения. \n ");
}
if (attributes & FILE_ATTRIBUTE_SPARSE_FILE) {
wprintf(L"Атрибуты файла: Файл, который является разреженным файлом. \n");
}
if (attributes & FILE_ATTRIBUTE_REPARSE_POINT) {
wprintf(L"Атрибуты файла: Файл или каталог, имеющий связанную точку повторной обработки, или файл, являющийся символической ссылкой.Файл или каталог, имеющий связанную точку повторной обработки, или файл, являющийся символической ссылкой.\n ");
}
if (attributes & FILE_ATTRIBUTE_NOT_CONTENT_INDEXED) {
wprintf(L"Атрибуты файла: Файл или каталог не подлежит индексации службой индексации контента. \n");
}
// Получение размера файла
DWORD fileSize = GetFileSize(hFile, NULL);
if (fileSize == INVALID_FILE_SIZE) {
CloseHandle(hFile);
return 1;
}
wprintf(L"Размер файла: %lu байт\n", fileSize);
// Получение времени создания файла
FILETIME creationTime, lastAccessTime, lastWriteTime;
if (!GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime)) {
CloseHandle(hFile);
return 1;
}
SYSTEMTIME stUTC, stLocal;
FileTimeToSystemTime(&creationTime, &stUTC);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
wprintf(L"Время создания файла: %02d/%02d/%d %02d:%02d\n", stLocal.wDay, stLocal.wMonth, stLocal.wYear, stLocal.wHour, stLocal.wMinute);
// Закрытие файла
CloseHandle(hFile);
setlocale(LC_ALL, "");
DWORD drives1 = GetLogicalDrives();
wprintf(L"Доступные логические диски:\n");
for (int i = 0; i < 26; i++) {
if (drives1 & (1 << i)) {
wchar_t driveLetter = L'A' + i;
wprintf(L"%c:\\\n", driveLetter);
}
}
wprintf(L"Доступные логические диски:\n");
//GetLogicalDriveStrings
WCHAR b[256];
// Получаем строки логических дисков
DWORD result = GetLogicalDriveStrings(256, b);
WCHAR* drive = b;
// Пока не достигнут конец всех строк
while (*drive) {
wprintf(L"Диск: %ls\n", drive);
// Переходим к следующей строке
drive += 4;
}
wchar_t chosenDrive[4];
wprintf(L"\nВведите логический диск (например, C:\\): ");
wscanf_s(L"%3s", chosenDrive, (unsigned)_countof(chosenDrive));
listFilesAndDirectories(chosenDrive);
wchar_t targetPath[MAX_PATH];
wprintf(L"\nВведите имя файла или каталога для удаления (например, C:\\example.txt): ");
wscanf_s(L"%259s", targetPath, (unsigned)_countof(targetPath));
deleteFileOrDirectory(targetPath);
return 0;
}
//1. Вывести на экран доступные варианты разрешения экрана и разрядности цвета.
// Обозначить текущие значения.
// Предусмотреть возможность изменения разрешения экрана,
// изменения обоев рабочего стола.
// Выводить цвет точки, на которую указывает курсор мыши.