Язык программирования C#9 и платформа .NET5
Запись в текстовый файл
Чтобы увидеть класс
в действии, создайте новый проект консольного приложения по имениStreamWriterи импортируйте пространства именStreamWriterReaderAppиSystem.IO. В показанном ниже коде с помощью методаSystem.Textсоздается новый файлFile.CreateText()внутри текущего каталога выполнения. С применением полученного объектаreminders.txtв новый файл будут добавляться текстовые данные.StreamWriterusing System;using System.IO;using System.Text;Console.WriteLine("***** Fun with StreamWriter / StreamReader *****\n");<b>// Получить объект StreamWriter и записать строковые данные.</b>using(StreamWriter writer = File.CreateText("reminders.txt")){writer.WriteLine("Don't forget Mother's Day this year...");writer.WriteLine("Don't forget Father's Day this year...");writer.WriteLine("Don't forget these numbers:");for(int i = 0; i < 10; i++){writer.Write(i + " ");}<b> // Вставить новую строку.</b>writer.Write(writer.NewLine);}Console.WriteLine("Created file and wrote some thoughts...");Console.ReadLine();//File.Delete("reminders.txt");После выполнения программы можете просмотреть содержимое созданного файла, который будет находиться в корневом каталоге проекта (Visual Studio Code) или в подкаталоге
(Visual Studio). Причина в том, что при вызовеbin\Debug\net5.0вы не указали абсолютный путь, а стандартным местоположением является текущий каталог выполнения сборки.CreateText()Чтение из текстового файла
Далее вы научитесь программно читать данные из файла, используя соответствующий тип
. Вспомните, чтоStreamReaderявляется производным от абстрактного классаStreamReader, который предлагает функциональность, описанную в табл. 20.9.TextReaderРасширьте текущий пример приложения с целью применения класса
, чтобы в нем можно было читать текстовые данные из файлаStreamReader:reminders.txtConsole.WriteLine("***** Fun with StreamWriter/StreamReader *****\n");...<b>// Прочитать данные из файла.</b>Console.WriteLine("Here are your thoughts:\n");using(StreamReader sr = File.OpenText("reminders.txt")){string input = null;while ((input = sr.ReadLine()) != null){Console.WriteLine (input);}}Console.ReadLine();После запуска программы в окне консоли отобразятся символьные данные из файла
.reminders.txtПрямое создание объектов типа StreamWriter/StreamReader
Один из запутывающих аспектов работы с типами пространства имен
связан с тем, что идентичных результатов часто можно добиться с использованием разных подходов. Например, ранее вы уже видели, что методSystem.IOпозволяет получить объектCreateText()с типомStreamWriterилиFile. Вообще говоря, есть еще один способ работы с объектамиFileInfoиStreamWriter: создание их напрямую. Скажем, текущее приложение можно было бы переделать следующим образом:StreamReaderConsole.WriteLine("***** Fun with StreamWriter/StreamReader *****\n");<b>// Получить объект StreamWriter и записать строковые данные.</b>using(StreamWriter writer = new StreamWriter("reminders.txt")){...}<b>// Прочитать данные из файла.</b>using(StreamReader sr = new StreamReader("reminders.txt")){...}Несмотря на то что существование такого количества на первый взгляд одинаковых подходов к файловому вводу-выводу может сбивать с толку, имейте в виду,что конечным результатом является высокая гибкость. Теперь, когда вам известно, как перемещать символьные данные в файл и из файла с применением классов
иStreamWriter, давайте займемся исследованием роли классовStreamReaderиStringWriter.StringReaderРабота с типами StringWriter и StringReader
Классы
иStringWriterможно использовать для трактовки текстовой информации как потока символов в памяти. Это определенно может быть полезно, когда нужно добавить символьную информацию к лежащему в основе буферу. Для иллюстрации в следующем проекте консольного приложения (StringReader) блок строковых данных записывается в объектStringReaderWriterAppвместо файла на локальном жестком диске (не забудьте импортировать пространства именStringWriterиSystem.IO):System.Text
