На этом шаге мы рассмотрим пример работы с бинарными файлами.
В некоторых случаях удобно хранить данные в бинарных файлах (последовательность произвольных байтов). Для работы с бинарными файлами используют бинарные потоки. Объекты таких потоков создаются на основе классов
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) (поток создается в режиме открытия уже существующего файла). Для считывания значений из файла используются методы
На следующем шаге мы начнем знакомиться с коллекциями.