Выполнена ЛР1
This commit is contained in:
parent
d4007d11e8
commit
993f511f34
@ -1,8 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("Hello world!");
|
||||
|
||||
return 0;
|
||||
}
|
267
Lab1/lab_1.c
Normal file
267
Lab1/lab_1.c
Normal file
@ -0,0 +1,267 @@
|
||||
#include <Windows.h>
|
||||
#include <stdio.h>
|
||||
#include <locale.h>
|
||||
|
||||
#define MAX_DRIVES 10
|
||||
|
||||
// 1. GetLogicalDriveStrings, GetDriveType.
|
||||
// 2. GetCurrentDirectory, GetFileAttributes, GetSystemDirectory, GetTempPath.
|
||||
// 3. SetCurentDirectory, SetFileAttributes, CreateFile, ReadFile, WriteFile.
|
||||
|
||||
// Порядок:
|
||||
// 1. Получить список всех томов.
|
||||
// 2. Для каждого тома получить его тип.
|
||||
// 3. Перейти в директорию, получить информацию о директории, создать файл, записать в него информацию о томах.
|
||||
// 4. Установить атрибуты файла, получить инфу об атрибутах. Прочитать файл, вывести всю инфу в консоль.
|
||||
// 5. Получить системную директорию и директорию временных данных, вывести в консоль.
|
||||
|
||||
DWORD buf_len = MAX_DRIVES;
|
||||
char drives_buf[MAX_DRIVES];
|
||||
|
||||
int main(void)
|
||||
{
|
||||
DWORD drives_num = GetLogicalDriveStrings(buf_len, drives_buf);
|
||||
|
||||
if (drives_num <= 0)
|
||||
{
|
||||
printf("\nGetLogicalDrives() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
char* single_drive = drives_buf;
|
||||
|
||||
while (*single_drive)
|
||||
{
|
||||
UINT dr_type = GetDriveType(single_drive);
|
||||
|
||||
printf("%c - ", *single_drive);
|
||||
|
||||
switch(dr_type)
|
||||
{
|
||||
case 0:
|
||||
printf("DRIVE_UNKNOWN\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("DRIVE_NO_ROOT_DIR\n");
|
||||
break;
|
||||
case 2:
|
||||
printf("DRIVE_REMOVABLE\n");
|
||||
break;
|
||||
case 3:
|
||||
printf("DRIVE_FIXED\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("DRIVE_REMOTE\n");
|
||||
break;
|
||||
case 5:
|
||||
printf("DRIVE_CDROM\n");
|
||||
break;
|
||||
case 6:
|
||||
printf("DRIVE_RAMDISK\n");
|
||||
break;
|
||||
default:
|
||||
printf("Unknown drive type.\n");
|
||||
break;
|
||||
}
|
||||
|
||||
single_drive += strlen(single_drive) + 1;
|
||||
}
|
||||
|
||||
BOOL dir_set = SetCurrentDirectory("C:\\Users\\taria\\Desktop\\work_directory");
|
||||
|
||||
if (dir_set == 0)
|
||||
{
|
||||
printf("\nSetCurrentDirectory() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
char dir_buf[MAX_PATH];
|
||||
DWORD dir_get = GetCurrentDirectory(sizeof(dir_buf), dir_buf);
|
||||
|
||||
if (dir_get <= 0)
|
||||
{
|
||||
printf("\nGetCurrentDirectory() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Current directory: %s\n", dir_buf);
|
||||
|
||||
HANDLE h_new_file = CreateFile(
|
||||
".\\drives.txt",
|
||||
GENERIC_READ | GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
if (h_new_file == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
printf("\nCreateFile() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
DWORD bts_wrttn;
|
||||
WriteFile(
|
||||
h_new_file,
|
||||
drives_buf,
|
||||
sizeof(drives_buf),
|
||||
&bts_wrttn,
|
||||
NULL);
|
||||
|
||||
if (bts_wrttn <= 0)
|
||||
{
|
||||
printf("\nWriteFile() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
BOOL attr_set = SetFileAttributes("drives.txt", FILE_ATTRIBUTE_TEMPORARY);
|
||||
|
||||
if (attr_set == 0)
|
||||
{
|
||||
printf("\nSetFileAttributes() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
DWORD file_attr = GetFileAttributes("drives.txt");
|
||||
|
||||
if (file_attr == INVALID_FILE_ATTRIBUTES)
|
||||
{
|
||||
printf("\nGetFileAttributes() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("File attribute code: %d\n", file_attr);
|
||||
printf("File attribute: ");
|
||||
|
||||
switch(file_attr)
|
||||
{
|
||||
case 2048:
|
||||
printf("Compressed\n");
|
||||
break;
|
||||
case 32:
|
||||
printf("Archive\n");
|
||||
break;
|
||||
case 16:
|
||||
printf("Directory\n");
|
||||
break;
|
||||
case 16384:
|
||||
printf("Encrypted\n");
|
||||
break;
|
||||
case 2:
|
||||
printf("Hidden\n");
|
||||
break;
|
||||
case 128:
|
||||
printf("Normal\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("Readonly\n");
|
||||
break;
|
||||
case 4:
|
||||
printf("System\n");
|
||||
break;
|
||||
case 256:
|
||||
printf("Temporary\n");
|
||||
break;
|
||||
default:
|
||||
printf("Unknown attribute.\n");
|
||||
break;
|
||||
}
|
||||
|
||||
BOOL closed = CloseHandle(h_new_file);
|
||||
|
||||
if (closed <= 0)
|
||||
{
|
||||
printf("CloseHandle() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("File closed.\n");
|
||||
|
||||
HANDLE h_exst_file = CreateFile(
|
||||
".\\drives.txt",
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ,
|
||||
NULL,
|
||||
OPEN_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
if (h_exst_file == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
printf("\nCreateFile() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
char file_buf[MAX_PATH];
|
||||
DWORD n_bytes_read;
|
||||
|
||||
BOOL read_file = ReadFile(
|
||||
h_exst_file,
|
||||
file_buf,
|
||||
sizeof(file_buf),
|
||||
&n_bytes_read,
|
||||
NULL);
|
||||
|
||||
if (read_file <= 0 || n_bytes_read == 0)
|
||||
{
|
||||
printf("\nReadFile() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
char* single_drive_info = file_buf;
|
||||
|
||||
while (*single_drive_info)
|
||||
{
|
||||
printf("File containment: %s\n", single_drive_info);
|
||||
|
||||
single_drive_info += strlen(single_drive_info) + 1;
|
||||
}
|
||||
|
||||
char sys_dir_buf[MAX_PATH];
|
||||
UINT sys_dir = GetSystemDirectory(sys_dir_buf, MAX_PATH);
|
||||
|
||||
if (sys_dir == 0)
|
||||
{
|
||||
printf("\nGetSystemDirectory() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("System directory: %s\n", sys_dir_buf);
|
||||
|
||||
char tmp_buf[MAX_PATH];
|
||||
DWORD tmp_path = GetTempPath(MAX_PATH, tmp_buf);
|
||||
|
||||
if (tmp_path == 0)
|
||||
{
|
||||
printf("\nGetTempPath() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Temp directory: %s\n", tmp_buf);
|
||||
|
||||
BOOL exst_closed = CloseHandle(h_exst_file);
|
||||
|
||||
if (exst_closed <= 0)
|
||||
{
|
||||
printf("CloseHandle() не выполнена или выполнена с ошибкой!");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("File closed.\n");
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user