#include #include #include #include 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. Вывести на экран доступные варианты разрешения экрана и разрядности цвета. // Обозначить текущие значения. // Предусмотреть возможность изменения разрешения экрана, // изменения обоев рабочего стола. // Выводить цвет точки, на которую указывает курсор мыши.