Асинхронный ввод-вывод

Поток байтов

 

Тип файла FileStream

FileStream f=new FileStream(“a.txt”, mode, режим);

 

Режим:

FileAccess.Read – только чтение

FileAccess.Write –только запись

FileAccess.ReadWrite –чтение\запись

 

Mode:

FileMode.Create – новый файл. Если такой файл есть, то он стирается

FileMode.Open –открыть существующий файл

FileMode.OpenOrCreate –тоже, если файла нет, то он создается

FileMode.Append –тоже , только указатель устанавливается в конец файла

 

Операции над файлам:

 

f.Read(x,0,20) –чтение с текущей позиции в файле,где 0 и 20 нач. и кон. индексы массива x

f.Read(y) – чтение байта

f.Seak(5,4); указатель устанавливается на 5-й символ начиная с 4-ого

f.Seek(5,SeekOrigin.Begin); -на 5-й символ с начала.

a=f.ReadByte(); -прочитать байт на текущей позиции

f.Close –закрытие файла

пример стр.251

 

 

Предназначен для параллельного процесса ввода-вывода и одновременно выполнение других частей программы. Асинхронно можно работать с любыми файлами .

Пример программы

byte[] buf=new byte[100000]

FileStream f=new FileStream(“a.txt”, FileAccess.Read, FileShare.Read, buf.Lenght, true); - true указывает на признак асинхронного ввода-выводы

AsyncCallback callback=new AsyncCallback(fff);

f.BeginRead(buf,0,buf.Lenght,callback,null);

// текст программы бeз использовании buf

// место, где начинает использоваться buf

while(!KodRead){} // до тех пор пока ввод KodRead не будет установлен бесконечный цикл

Выше приведенного текста необходимо поместить установку флага KodRead=false и определить обработчик, выполнение которого осуществляется после полного процесса чтения:

bool KodRead=false;

int Rbutes;

public void fff (IAsyncResult e) //стандартно!

{

Rbutes=f. EndRead (e);

KodRead=true;

}

! После окончания процесса полного ввода выполнится процедура fff, которая и устанавливает флаг KodRead. Можно также определить и число считанных байтов Rbutes.

Объектно-ориентированное программирование

Структуры

Под структурой понимается инкансулированный набор переменных (свойств) и подпрограмм (методов).

Пример

Надо создать полный набор арифметики для комплексного числа.

1. Свойства re, и im– действ. и мнима часть числа

2. Методы:

а) переопределенные операции + - *

б) метод получения модуля

в) метод получения строки ввода на печать

Шаблон структуры:

struct complex

{

Public double re=0, im=0;

Конструктор полный

переопр. +

переопр. –

переопр. *

модуль

строка вывода

}

Конструктор полный

public complex (double re, double im)

{tris.re = re; this.im=im;} // Это переменные, объявленные свойствами в структуре.

// переопр. + (для – тоже самое, с заменой + на -)

public static complex operator + (complex a, complex b)

{

complex z;

z.re=a.re+b.re;

z.im=a.im+b.im;

return z;

}

переопр. *

public static complex operator * (complex a, complex b)

{

complex z;

z.re=a.re*b.re-a.im*b.im;

z.im= a.re*b.im+a.im*b.re;

return z;

}

 

Модуль

Public double CMod (complex a)

{double Z;

Z=a.re*a.re-a.im*a.im;

return z;

}

Строка вывода

Для этого надо переопределить метод ToString( ) преобразования этого типа сomplex в string

public override string ToString( )

{

return(string.Format(“{0}+i{1}”,this.re.this.im);

/\

свойства структуры

Пример программы:

complex a; // конструктор по умолчанию

complex b = new complex(1,4);

a.re=5; a.im=6;

complex y; y = a+b;

console.Writeline(“y={0}”+y); // будет выведено y=6+i10