Шаг 296.
Язык программирования C#. Начала.
Немного о разном. Работа с файлами (окончание)

    На этом шаге мы рассмотрим пример работы с бинарными файлами.

    В некоторых случаях удобно хранить данные в бинарных файлах (последовательность произвольных байтов). Для работы с бинарными файлами используют бинарные потоки. Объекты таких потоков создаются на основе классов

Пример создания и использования бинарных потоков представлен в примере ниже.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.IO;

namespace pr296_1
{
    // Главный класс:
    class Program
    {
        // Главный метод:
        static void Main()
        {
            // Данные для записи в файл:
            int num = 123; // Целое число
            char symb = 'A'; // Символ
            double x = 2.5; // Действительное число
            string txt = "Hello, World!"; // Текст
            // Путь к файлу и его название:
            string file = "MyData.dat";
            Console.WriteLine("Запись данных в файл..."); 
            try { // Контролируемый код
                // Бинарный поток для записи данных в файл:
                BinaryWriter bw = new BinaryWriter(new FileStream(file, FileMode.Create));
                // Запись данных в файл:
                bw.Write(num);  // Целое число 
                bw.Write(symb); // Символ
                bw.Write(x);    // Действительное число 
                bw.Write(txt);  // Текст 
                // Поток закрывается: 
                bw.Close();
            }
            // Обработка исключений: 
            catch(Exception e) {
                Console.WriteLine("Ошибка записи в файл!");
                Console.WriteLine(e.Message);
                // Задержка:
                Console.ReadLine();
                return; // Завершение выполнения программы
            }
            Console.WriteLine("Создан файл \"{0}\"", file); 
            Console.WriteLine("Считывание данных из файла..."); 
            try { // Контролируемый код
                // Бинарный поток для считывания данных из файла:
                BinaryReader br = new BinaryReader(new FileStream(file, FileMode.Open)); 
                // Считывание данных из файла и отображение в 
                // консольном окне:
                Console.WriteLine(br.ReadInt32());  // Целое число 
                Console.WriteLine(br.ReadChar());   // Символ 
                Console.WriteLine(br.ReadDouble()); // Число 
                Console.WriteLine(br.ReadString()); // Текст 
                // Поток закрывается: 
                br.Close();
            }
            // Обработка исключений: 
            catch(Exception e){
                Console.WriteLine("Ошибка чтения файла!"); 
                Console.WriteLine(e.Message);
            }
            Console.WriteLine("Завершение программы...");
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    При выполнении программы в консольном окне появляются следующие сообщения:


Рис.1. Результата рабоы приложения

    При выполнении программы в каталоге bin/Debug проекта создается файл MyData.dat. В этот файл записывается целочисленное значение, символ, действительное число и текст. После этого файл открывается для чтения, и записанные ранее в файл значения отображаются в консольном окне.


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

    Данные, предназначенные для записи в файл, заносятся в переменные num, symb, x и txt. Путь к файлу и его название записываются в текстовую переменную file.

    Бинарный поток для записи данных в файл создается на основе байтового потока. Если точнее, то при создании объекта бинарного потока bw на основе класса BinaryWriter в качестве аргумента конструктору класса передается инструкция new FileStream(file, FileMode. Create). Эта инструкция означает создание байтового потока, который открывается в режиме создания нового файла. Созданный таким образом поток bw предназначен для записи данных в файл. Для этого из объекта потока вызывается метод Write(), аргументом которому передается записываемое в файл значение. При завершении записи данных в поток он закрывается командой bw.Close().

    После того как файл создан и в него занесены данные, создается еще один бинарный поток br. Поток создается на основе класса BinaryReader и предназначен для считывания данных из файла. Аргументом конструктору класса BinaryReader передается анонимный объект байтового потока, который создается инструкцией new FileStream(file, FileMode.Open) (поток создается в режиме открытия уже существующего файла). Для считывания значений из файла используются методы

Методы вызываются из объекта потока br, а по завершении процесса считывания данных поток закрывается командой br.Close().

    На следующем шаге мы начнем знакомиться с коллекциями.




Предыдущий шаг Содержание Следующий шаг