Лабораторная работа №2
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ ИМ. И. РАЗЗАКОВА
Лабораторная работа
Бишкек 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));
}
}
Фото результат: