#include #include #include int getLogicalDriveStrings() { printf("- GetLogicalDriveStrings:\n"); char buffer[4096]; // сам буфер для строки DWORD bufSize = sizeof(buffer) - 1; // размер буфера, в который нужно записывать строку с дисками GetLogicalDriveStrings(bufSize, buffer); // Получение списка логических дисков char *drive = buffer; while (*drive) { // перебор дисков printf("Диск: %s\n", drive); // следующий диск drive += strlen(drive) + 1; } return 0; } int getVolumeInformation() { printf("- GetVolumeInformation:\n"); char volumeName[256]; char fileSystemName[256]; DWORD serialNumber; DWORD maxComponentLength; DWORD fileSystemFlags; // Получение информации о текущем диске GetVolumeInformation("C:\\", // указатель на строку, содержащую корневой каталог тома volumeName, // буфер, который получит имя тома sizeof(volumeName), // длина буфера для имени тома &serialNumber, // указатель на переменную, которая получит имя указанного тома &maxComponentLength, // &fileSystemFlags, // fileSystemName, // буфер для названия файловой системы sizeof(fileSystemName)); // размер буфера названия файловой системы printf("Имя тома: %s\n", volumeName); printf("Серийный номер: %lu\n", serialNumber); printf("Max Component Length: %lu\n", maxComponentLength); printf("Тип файловой системы: %s\n", fileSystemName); printf("File System Flags: %lu\n", fileSystemFlags); return 0; } // --- long getFileSize(LPCSTR path) { printf("- GetFileSize:\n"); HANDLE hFile; unsigned long long high; unsigned long long low; // Открытие файла hFile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { printf("Не удалось открыть файл\n"); CloseHandle(hFile); return 1; } // Получение размера файла low = GetFileSize(hFile, (LPDWORD) &high); // Закрытие файла CloseHandle(hFile); // Вывод размера файла printf("Размер файла: %llu\n", high << 32 | low); return 0; } int findNextFile() { printf("- FindNextFile:\n"); WIN32_FIND_DATA findData; HANDLE hFind; char path[MAX_PATH]; // Задаем путь к директории, которую нужно просканировать strcpy(path, "..\\*"); // Начинаем поиск первого файла/папки в директории hFind = FindFirstFile(path, &findData); // Перебираем все файлы и папки в директории do { if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { printf("Папка: %s\n", findData.cFileName); } else { printf("\tФайл: %s\n", findData.cFileName); } } while (FindNextFile(hFind, &findData)); // Закрытие дескриптора поиска FindClose(hFind); return 0; } int getWindowsDirectory() { printf("- GetWindowsDirectory:\n"); char windowsDir[255]; // сюда запишутся символы пути GetWindowsDirectory(windowsDir, sizeof(windowsDir)); printf("Виндосв папка тут: %s\n", windowsDir); return 0; } int compareFileTime(LPCSTR path_1, LPCSTR path_2) { printf("- CompareFileTime:\n"); FILETIME fileTime1; FILETIME fileTime2; // первый файл HANDLE file1 = CreateFile(path_1, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (file1 == INVALID_HANDLE_VALUE) { printf("Не удалось открыть файл 1\n"); CloseHandle(file1); return 1; } // время изменения первого файла GetFileTime(file1, NULL, NULL, &fileTime1); // закрываем первый файл CloseHandle(file1); // Открываем второй файл HANDLE file2 = CreateFile(path_2, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (file2 == INVALID_HANDLE_VALUE) { printf("Не удалось открыть файл 2\n"); CloseHandle(file2); return 1; } // Получаем время изменения второго файла GetFileTime(file2, NULL, NULL, &fileTime2); // Закрываем второй файл CloseHandle(file2); // Сравниваем время изменения файлов int comparisonResult = CompareFileTime(&fileTime1, &fileTime2); if (comparisonResult == 1) { printf("Файл 1 был изменен раньше файла 2\n"); } else if (comparisonResult == -1) { printf("Файл 2 был изменен раньше файла 1\n"); } else { printf("Время изменения файлов одинаково\n"); } return 0; } // --- int setLocalTime() { printf("- SetLocalTime:\n"); // Создание структуры SYSTEMTIME для установки времени SYSTEMTIME systemTime; // Заполнение структуры SYSTEMTIME данными текущего времени GetLocalTime(&systemTime); printf("Дата и время ДО изменения: %02d-%02d-%d %02d:%02d:%02d\n", systemTime.wDay, systemTime.wMonth, systemTime.wYear, systemTime.wHour, systemTime.wMinute, systemTime.wSecond); // Увеличение часового значения на 1 if (systemTime.wHour < 23) { systemTime.wHour++; } else { systemTime.wHour = 0; } // Установка нового времени с использованием SetLocalTime SetLocalTime(&systemTime); printf("Время успешно изменено\n"); printf("Дата и время ПОСЛЕ изменения: %02d-%02d-%d %02d:%02d:%02d\n", systemTime.wDay, systemTime.wMonth, systemTime.wYear, systemTime.wHour, systemTime.wMinute, systemTime.wSecond); return 0; } int getFileAttributes(LPCSTR path){ DWORD fileAttributes = GetFileAttributes(path); if (fileAttributes == INVALID_FILE_ATTRIBUTES) { printf("Ошибка открытия файла.\n"); return 1; } if (fileAttributes & FILE_ATTRIBUTE_READONLY) { printf("\n/Read-only"); } if (fileAttributes & FILE_ATTRIBUTE_HIDDEN) { printf("\n/Hidden"); } if (fileAttributes & FILE_ATTRIBUTE_ARCHIVE) { printf("\n/Directory"); }// и так далее для других атрибутов файла... printf("\n"); } int setFileAttributes(LPCSTR path, DWORD dwFileAttributes) { printf("- SetFileAttributes:\n"); // Gуть к файлу // Сбрасываем атрибуты файла SetFileAttributes(path, (DWORD) 0); // Текущие атрибуты файла printf("\tТекущие атрибуты файла ДО замены: "); getFileAttributes(path); // Устанавливаем атрибуты файла DWORD newFileAttributes = dwFileAttributes; BOOL result = SetFileAttributes( path, (DWORD) newFileAttributes); printf("\tТекущие атрибуты файла ПОСЛЕ замены: "); getFileAttributes(path); return 0; } int createFile() { printf("- CreateFile:\n"); HANDLE hFile; char* fileName = "example.txt"; // Создание файла hFile = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Запись в файл char* data = "Hello, World!"; DWORD bytesWritten; WriteFile(hFile, data, strlen(data), &bytesWritten, NULL); // Закрытие файла CloseHandle(hFile); // Повторное открытие файла hFile = CreateFile(fileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Чтение из файла const int bufferSize = 100; char buffer[bufferSize]; DWORD bytesRead; if (!ReadFile(hFile, buffer, bufferSize, &bytesRead, NULL)) { printf("Failed to read from file.\n"); CloseHandle(hFile); return 1; } // Вывод содержимого файла printf("Содержимое файла: %.*s\n", bytesRead, buffer); // Закрытие файла CloseHandle(hFile); return 0; } int main() { setlocale(LC_ALL, "Rus"); printf("\n----------------------------\n----------------------------\n----------------------------\n"); printf("\tИнформация о дисках:\n"); // getLogicalDriveStrings();// + получение букв дисков // getVolumeInformation();// + получение информации о файловой системе выбранного логического диска printf("\n------------------------------------------\n"); printf("\tИнформация о файлах и директориях:\n"); getFileSize("text.txt");// + получает размер файла getFileSize("texавпавпt.txt");// + получает размер файла // findNextFile();// + поиск следующего файла в месте поиска // getWindowsDirectory();// + путь к основному каталогу виндовс compareFileTime("text.txt", "text2.txt.");// + определение какой из файлов более новый printf("\n----------------------------\n"); printf("\tУправляющие функции:\n"); // setLocalTime();// + установить текущую дату и время printf("\tВведите нужный атрибут для установки файлу: 1 - только для чтения, 2 - скрытый, 3 - архивный\n"); int chislo = 0; scanf("%d", &chislo); if (chislo == 1 || chislo == 2 || chislo == 3) setFileAttributes("text3.txt", chislo);// + установка файловых атрибутов else { printf("Указан неверный номер атрибута\n"); } // createFile();// + создать/открыть файл // CopyFile("text.txt", "text3.txt", 0);// скопировать файл }