Чтение и запись текстовых файлов. StreamReader и StreamWriter

Класс FileStream не очень удобно применять для работы с текстовыми файлами. К тому же для этого в пространстве System.IO определены специальные классы: StreamReader и StreamWriter.

Чтение из файла и StreamReader

Класс StreamReader позволяет нам легко считывать весь текст или отдельные строки из текстового файла. Среди его методов можно выделить следующие:

  • Close: закрывает считываемый файл и освобождает все ресурсы
  • Peek: возвращает следующий доступный символ, если символов больше нет, то возвращает -1
  • Read: считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию: Read(char[] array, int index, int count), где array - массив, куда считываются символы, index - индекс в массиве array, начиная с которого записываются считываемые символы, и count - максимальное количество считываемых символов
  • ReadLine: считывает одну строку в файле
  • ReadToEnd: считывает весь текст из файла

Считаем текст из файла различными способами:

string path= @"C:\SomeDir\hta.txt";

try

{

Console.WriteLine("******считываем весь файл********");

using (StreamReader sr = new StreamReader(path))

{

Console.WriteLine(sr.ReadToEnd());

}

Console.WriteLine();

Console.WriteLine("******считываем построчно********");

using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))

{

string line;

while ((line = sr.ReadLine())!= null)

{

Console.WriteLine(line);

}

}

Console.WriteLine();

Console.WriteLine("******считываем блоками********");

using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))

{

char[] array = new char[4];

// считываем 4 символа

sr.Read(array, 0, 4);

Console.WriteLine(array);

}

}

catch (Exception e)

{

Console.WriteLine(e.Message);

}

 

Как и в случае с классом FileStream здесь используется конструкция using.

В первом случае мы разом считываем весь текст с помощью метода ReadToEnd().

Во втором случае считываем построчно через цикл while: while ((line = sr.ReadLine())!= null) - сначала присваиваем переменной line результат функции sr.ReadLine(), а затем проверяем, не равна ли она null. Когда объект sr дойдет до конца файла и больше строк не останется, то метод sr.ReadLine() будет возвращать null.

В третьем случае считываем в массив четыре символа.

Обратите внимание, что в последних двух случаях в конструкторе StreamReader указывалась кодировка System.Text.Encoding.Default. Свойство Default класса Encoding получает кодировку для текущей кодовой страницы ANSI. Также через другие свойства мы можем указать другие кодировки. Если кодировка не указана, то при чтении используется UTF8. Иногда важно указывать кодировку, так как она может отличаться от UTF8, и тогда мы получим некорректный вывод. Например:

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: