Из продемонстрированного примера можно сделать вывод: когда необходимо быстро получить файловый дескриптор, тип File
FileInfo заключается в возможности сбора сведений о файле с применением членов абстрактного базового класса FileSystemInfo.Абстрактный класс Stream
Вы уже видели много способов получения объектов FileStream
StreamReader и StreamWriter, но с использованием упомянутых типов нужно еще читать данные или записывать их в файл. Чтобы понять, как это делается, необходимо освоить концепцию потока. В мире манипуляций вводом-выводом Абстрактный класс System.IO.Stream
На заметку!
Концепция потока не ограничена файловым вводом-выводом. Естественно, библиотеки .NET Core предлагают потоковый доступ к сетям, областям памяти и прочим абстракциям, связанным с потоками.Потомки класса Stream
Stream, поддерживают Stream, что помогает понять его функциональность.Работа с типом FileStream
Класс FileStream
Stream в манере, подходящей для потоковой работы с файлами. Это элементарный поток; он может записывать или читать только одиночный байт или массив байтов. Однако напрямую взаимодействовать с членами типа FileStream вам придется нечасто. Взамен вы, скорее всего, будете применять разнообразные FileStream.Пусть имеется новый проект консольного приложения под названием FileStreamApp
System.IO и System.Text). Целью будет запись простого текстового сообщения в новый файл по имени myMessage.dat. Однако с учетом того, что FileStream может оперировать только с низкоуровневыми байтами, объект типа System.String придется закодировать в соответствующий байтовый массив. К счастью, в пространстве имен System.Text определен тип Encoding, предоставляющий члены, которые кодируют и декодируют строки в массивы байтов.После кодирования байтовый массив сохраняется в файле с помощью метода FileStream.Write()
Position) и вызвать метод ReadByte(). Наконец, на консоль выводится содержимое низкоуровневого байтового массива и декодированная строка. Ниже приведен полный код:using System;
using System.IO;
using System.Text;
// He забудьте импортировать пространства имен System.Text и System.IO.
Console.WriteLine("***** Fun with FileStreams *****\n");
// Получить объект FileStream.
using(FileStream fStream = File.Open("myMessage.dat",
FileMode.Create))
{
// Закодировать строку в виде массива байтов.
string msg = "Hello!";
byte[] msgAsByteArray = Encoding.Default.GetBytes(msg);
// Записать byte[] в файл.
fStream.Write(msgAsByteArray, 0, msgAsByteArray.Length);
// Сбросить внутреннюю позицию потока.
fStream.Position = 0;
// Прочитать byte[] из файла и вывести на консоль.
Console.Write("Your message as an array of bytes: ");
byte[] bytesFromFile = new byte[msgAsByteArray.Length];