class RandomAccessDemo { static void Main() {

FileStream f = null; char ch;

try {

f = new FileStream('random.dat', FileMode.Create);

// Записать английский алфавит в файл, for (int i=0; i < 26; i++) f.WriteByte((byte) ('A'+i));

//А теперь считать отдельные буквы английского алфавита. f.Seek(0, SeekOrigin.Begin); // найти первый байт ch = (char) f. ReadByte () ;

Console.WriteLine('Первая буква: ' + ch) ;

f.Seek(l, SeekOrigin.Begin); // найти второй байт ch = (char) f. ReadByte () ;

Console.WriteLine('Вторая буква: ' + ch);

f.Seek(4, SeekOrigin.Begin); // найти пятый байт ch = (char) f.ReadByte() ;

Console.WriteLine('Пятая буква: ' + ch) ;

Console.WriteLine() ;

//А теперь прочитать буквы английского алфавита через одну.

Console.WriteLine('Буквы алфавита через одну: '); for(int i=0; i < 26; i += 2) {

f.Seek(i, SeekOrigin.Begin); // найти i-й символ ch = (char) f.ReadByte() ;

Console.Write(ch + ' ') ;

}

}

catch(IOException exc) {

Console.WriteLine('Ошибка ввода-выводап' + exc.Message);

'} finally {

if(f != null) f.Close();

}

Console.WriteLine() ;

}

}

При выполнении этой программы получается следующий результат.

Перзая буква: А Вторая буква: В Пятая буква: Е

Буквы алфавита, через одну:

АСЕ G‘I KMOQSUWY

Несмотря на то что метод Seek () имеет немало преимуществ при использовании с файлами, существует и другой способ установки текущего положения в файле с помощью свойства Position. Как следует из табл. 14.2, свойство Position доступно как для чтения, так и для записи. Поэтому с его помощью можно получить или же установить текущее положение в файле. В качестве примера ниже приведен фрагмент кода из предыдущей программы записи и чтения из файла с произвольным доступом random.dat, измененный с целью продемонстрировать применение свойства Position.

Console.WriteLine('Буквы алфавита через одну: '); for(int i=0; i < 26; i += 2)    {

f.Position = i; // найти i-й символ посредством свойства Position ch = (char) f.ReadByte ();

Console.Write(ch + ' ');

}

Применение класса MemoryStream

Иногда оказывается полезно читать вводимые данные из массива или записывать выводимые данные в массив, а не вводить их непосредственно из устройства или выводить прямо на него. Для этой цели служит класс MemoryStream. Он представляет собой реализацию класса Stream, в которой массив байтов используется для ввода и вывода. В классе MemoryStream определено несколько конструкторов. Ниже представлен один из них:

MemoryStream(byte[ ] buffer)

где buffer обозначает массив байтов, используемый в качестве источника или адресата в запросах ввода-вывода. Используя этот конструктор, следует иметь в виду, что массив buffer должен быть достаточно большим для хранения направляемых в него данных.

В качестве примера ниже приведена программа, демонстрирующая применение класса MemoryStream в операциях ввода-вывода.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату