Язык программирования C#9 и платформа .NET5
Часть 366 из 642 Информация о книге
{<b> // Использовать объект FileStream...</b>}File.Delete(fileName);<b>// Создать новый файл через File.Open().</b>using(FileStream fs9 = File.Open(fileName,FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.None)){<b> // Использовать объект FileStream...</b>}<b>// Получить объект FileStream с правами только для чтения.</b>using(FileStream readOnlyStream = File.OpenRead(fileName)){}File.Delete(fileName);<b>// Получить объект FileStream с правами только для записи.</b>using(FileStream writeOnlyStream = File.OpenWrite(fileName)){}<b>// Получить объект StreamReader.</b>using(StreamReader sreader = File.OpenText(fileName)){}File.Delete(fileName);<b>// Получить несколько объектов StreamWriter.</b>using(StreamWriter swriter = File.CreateText(fileName)){}File.Delete(fileName);using(StreamWriter swriterAppend =File.AppendText(fileName)){}File.Delete(fileName);Дополнительные члены типа File
Тип
также поддерживает несколько членов, описанных в табл. 20.6, которые могут значительно упростить процессы чтения и записи текстовых данных.FileПриведенные в табл. 20.6 методы типа
можно использовать для реализации чтения и записи пакетов данных посредством всего нескольких строк кода. Еще лучше то, что эти методы автоматически закрывают лежащий в основе файловый дескриптор. Например, следующий проект консольного приложения (по имениFile) сохраняет строковые данные в новом файле на диске С: (и читает их в память) с минимальными усилиями (здесь предполагается, что было импортировано пространство именSimpleFileIO):System.IOConsole.WriteLine("***** Simple I/O with the File Type *****\n");string[] myTasks = {"Fix bathroom sink", "Call Dave","Call Mom and Dad", "Play Xbox One"};<b>// Записать все данные в файл на диске С:.</b>File.WriteAllLines(@"tasks.txt", myTasks);<b>// Прочитать все данные и вывести на консоль.</b>foreach (string task in File.ReadAllLines(@"tasks.txt")){Console.WriteLine("TODO: {0}", task);}Console.ReadLine();File.Delete("tasks.txt");Из продемонстрированного примера можно сделать вывод: когда необходимо быстро получить файловый дескриптор, тип
позволит сэкономить на объеме кодирования. Тем не менее, преимущество предварительного создания объектаFileзаключается в возможности сбора сведений о файле с применением членов абстрактного базового классаFileInfo.FileSystemInfoАбстрактный класс Stream
Вы уже видели много способов получения объектов
,FileStreamиStreamReader, но с использованием упомянутых типов нужно еще читать данные или записывать их в файл. Чтобы понять, как это делается, необходимо освоить концепцию потока. В мире манипуляций вводом-выводом поток (stream) представляет порцию данных, протекающую между источником и приемником. Потоки предоставляют общий способ взаимодействия с последовательностью байтов независимо от того, устройство какого рода (файл, сетевое подключение либо принтер) хранит или отображает байты.StreamWriterАбстрактный класс
определяет набор членов, которые обеспечивают поддержку синхронного и асинхронного взаимодействия с хранилищем (например, файлом или областью памяти).System.IO.StreamНа заметку! Концепция потока не ограничена файловым вводом-выводом. Естественно, библиотеки .NET Core предлагают потоковый доступ к сетям, областям памяти и прочим абстракциям, связанным с потоками.
Потомки класса
представляют данные в виде низкоуровневых потоков байтов; следовательно, работа непосредственно с низкоуровневыми потоками может оказаться не особенно понятной. Некоторые типы, производные отStream, поддерживают позиционирование, которое означает процесс получения и корректировки текущей позиции в потоке. В табл. 20.7 приведено описание основных членов классаStream, что помогает понять его функциональность.StreamРабота с типом FileStream
Класс
предоставляет реализацию абстрактных членовFileStreamв манере, подходящей для потоковой работы с файлами. Это элементарный поток; он может записывать или читать только одиночный байт или массив байтов. Однако напрямую взаимодействовать с членами типаStreamвам придется нечасто. Взамен вы, скорее всего, будете применять разнообразные оболочки потоков, которые облегчают работу с текстовыми данными или типами .NET Core. Тем не менее, полезно поэкспериментировать с возможностями синхронного чтения/записи типаFileStream.FileStream

