При создании двоичного файла в него передается объект базового потока. При установке указателя текущей позиции в файле учитывается длина каждого значения типа double – 8 байт.
Для просмотра сформированного файла с помощью экземпляра BinaryReader считывается содержимое файла в массив вещественных чисел, а затем выводится этот массив на экран.
При чтении метод ReadDouble при обнаружении конца файла генерирует исключение EndOfStreamException. Поскольку в данном случае это не ошибка, тело обработчика исключений пустое.
Пример чтения двоичного файла
using System;
using System.IO;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
try
{
FileStream f=
new FileStream( @"E:\11.txt", FileMode.Open);
BinaryReader fin=new BinaryReader(f);
long n=f.Length/8; //количество чисел в файле
double[] x=new double[n];
long i=0;
try
{
while(true) x[i++]=fin.ReadDouble(); //чтение
}
catch (EndOfStreamException e) {}
foreach (double d in x) Console.Write(" "+d); //вывод
fin.Close(); Console.ReadKey();
f.Close();
}
catch (FileNotFoundException e)
{ Console.WriteLine(e.Message);
Console.WriteLine("Проверьте правильность имени файла!");
Для организации ввода и вывода используется класс Console, определенный в пространстве имен System. В этом классе определены три стандартных потока: входной поток Console.In класса TextReader и выходные потоки Console.Out и Console.Error класса TextWriter.
По умолчанию входной поток связан с клавиатурой, а выходные – с экраном, однако можно перенаправить эти потоки на другие устройства с помощью методов SetIn и SetOut или средствами операционной системы (перенаправление с помощью операции << и >>).
При обмене с консолью можно применять методы указанных потоков, но чаще используется методы класса Console – Read, ReadLine, Write и WriteLine, которые просто передают управление методам нижележащих классов In, Out и Error.
В пространстве имен System.IO есть четыре класса, предназначенные для работы с физическими файлами и структурой каталогов на диске: Directory, File, DirectoryInfo и FileInfo. С их помощью можно выполнять создание, удаление, перемещение файлов и каталогов, а также получение их свойств. Основные элементы этих классов представлены в таблицах 11.9 и 11.10.