using System; using System.10;
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[ ]