Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №2

.docx
Скачиваний:
11
Добавлен:
22.05.2021
Размер:
259.71 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ

КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА

Лабораторная работа

Бишкек 2021

Лабораторная работа №2

Цель работы: Изучение архитектуры операционной системы Windows

Вариант №9

Упорядочить буквы в обратном алфавитном порядке

Листинг кода:

class Program

{

//function import

[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]

static extern SafeFileHandle CreateFile(

string fileName,

[MarshalAs(UnmanagedType.U4)] FileAccess fileAccess,

[MarshalAs(UnmanagedType.U4)] FileShare fileShare,

IntPtr securityAttributes,

[MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,

FileAttributes flags,

IntPtr template);

//function to read

private static byte[] ReadDrive(string FileName, int sizeToRead)

{

if (sizeToRead < 1)

throw new System.ArgumentException("Размер параметра не может быть null или 0 или меньше чем 0!");

SafeFileHandle drive = CreateFile(// возвращаемое значение - открытый дескриптор заданного файла

fileName: FileName,//имя файла для чтения

fileAccess: FileAccess.Read,//доступ только для чтения

fileShare: FileShare.Write | FileShare.Read | FileShare.Delete,

securityAttributes: IntPtr.Zero,

creationDisposition: FileMode.OpenOrCreate,//создать или открыть существующий файл

flags: FileAttributes.Normal, // У файла нет других установленных атрибутов

template: IntPtr.Zero);

if (drive.IsInvalid)

{

throw new IOException("Нет доступа к Win32 Ошибка кода " +

Marshal.GetLastWin32Error());

//if get windows error code 5 this means access denied.

//You must try to run the program as admin privileges.

}

//чтение данных по дескриптору файла

FileStream diskStreamToRead = new FileStream(drive, FileAccess.Read);

byte[] buf = new byte[512];

diskStreamToRead.Read(buf, 0, 512);

try { diskStreamToRead.Close(); } catch { }//закрытие файлового потока

try { drive.Close(); } catch { }//закрытие дескриптора

return buf;

}

//function to write

private static void writeToDisk(string lpFileName, byte[] dataToWrite)

{

if (dataToWrite == null) throw new System.ArgumentException("параметр dataToWrite не может быть null!");

SafeFileHandle drive = CreateFile(

fileName: lpFileName,//название файла для записи данных

fileAccess: FileAccess.Write,//доступ только для записи

fileShare: FileShare.Write | FileShare.Read | FileShare.Delete,

securityAttributes: IntPtr.Zero,

creationDisposition: FileMode.Create,//создает новый файл/ если файл создан удаляет

flags: FileAttributes.Normal, //with this also an enum can be used. (as described above as EFileAttributes)

template: IntPtr.Zero);

FileStream diskStreamToWrite = new FileStream(drive, FileAccess.Write);

diskStreamToWrite.Write(dataToWrite, 0, dataToWrite.Length);//запись данных в файл

try { diskStreamToWrite.Close(); } catch { }

try { drive.Close(); } catch { }

}

static void Main(string[] args)

{

byte[] buf = ReadDrive("tt.txt", 512); //чтение данных из файла tt.txt

//преобразование в строку

string text = System.Text.Encoding.UTF8.GetString(buf);

//вывод на консоль

Console.WriteLine("Текст с файла tt.txt: \n" + text);

// Упорядочить буквы в обратном алфавитном порядке

char temp;

string str = text.ToLower();

char[] charstr = str.ToCharArray();

for (int i = 1; i < charstr.Length; i++)

{

for (int j = 0; j < charstr.Length - 1; j++)

{

if (charstr[j] < charstr[j + 1])

{

temp = charstr[j];

charstr[j] = charstr[j + 1];

charstr[j + 1] = temp;

}

}

}

//вывод результата на консоль

Console.WriteLine();

Console.WriteLine(charstr);

Console.ReadLine();

//запись результата в итоговый файл

writeToDisk("pp.txt", System.Text.Encoding.UTF8.GetBytes(charstr));

}

}

Фото результат: