Класс StreamWriter. Обзор методов и свойств
Данная тема есть продолжением темы:
Связанные темы
- 1. Методы класса StreamWriter
- 1.1. Метод Close(). Закрытие потока вывода
- 1.2. Метод Flush(). Очистка буферов
- 1.3. Методы записи в файловый поток данных, которые представлены отдельными символами
- 1.4. Методы записи строк типа string в поток
- 1.4.1. Методы Write(string) и WriteLine(string). Запись строки
- 1.4.2. Методы Write(string, object) и WriteLine(string, object). Запись в поток форматированной строки с одним аргументом
- 1.4.3. Методы Write(string, object, object) и WriteLine(string, object, object). Запись форматованной строки с двумя аргументами
- 1.4.4. Методы Write(string, object, object, object) и WriteLine(string, object, object, object). Запись форматованной строки с тремя аргументами
- 1.4.5. Метод Write(string, object[]). Запись форматованной строки с любым количеством аргументов
- 2. Свойства
- Связанные темы
Поиск на других ресурсах:
1. Методы класса StreamWriter
В примерах ниже, чтобы корректно использовать методы класса StreamWriter, нужно подключить пространства имен System и System.IO.
// Подключить пространства имен System, System.IO using System; using System.IO;
⇑
1.1. Метод Close(). Закрытие потока вывода
Метод Close() предназначен для закрытия потока вывода и освобождения ресурсов. Объявление метода следующее
public override void Close();
При использовании метода для кодировки Unicode может быть сгенерировано исключение следующего типа
- System.Text.EncoderFallBackException — текущая кодировка не поддерживает отображение половины суррогатной пары Unicode.
Пример.
// Создать поток StreamWriter StreamWriter fOut = new StreamWriter("myfile2.txt"); // Использование потока // ... // Закрити потік оператором Close() fOut.Close();
⇑
1.2. Метод Flush(). Очистка буферов
Метод Flush() используется для очистки всех буферов для текущего потока. Объявление метода следующее:
public override void Flush();
При использовании метода могут быть сгенерированы исключения следующих типов:
- System.ObjectDisposedException — текущий поток вывода закрыт;
- System.IO.IOException — ошибка ввода/вывода;
- System.Text.EncoderFallBackException — текущая кодировка не поддерживает отображение половины суррогатной пары Unicode.
Пример.
// Создать поток StreamWriter StreamWriter fOut = new StreamWriter("myfile2.txt"); // Очистить буфер fOut.Flush(); // Использование потока // ...
⇑
1.3. Методы записи в файловый поток данных, которые представлены отдельными символами
Класс StreamWriter представляет целый набор перегруженных методов Write() или WriteLine() для записи текстовой информации в файловый поток разными способами.
1.3.1. Метод Write(char). Запись одиночного символа
Данный метод позволяет записывать посимвольно в файловый поток
public override void Write(char value);
здесь value – записываемое значение.
При использовании метода могут быть исключения следующих типов
- System.IO.IOException — ошибка ввода/вывода;
- System.ObjectDisposedException — возникает в случаях, когда значение свойства AutoFlush = true или буфер StreamWriter полон и поток вывода закрыт;
- System.NonSupportedException — генерируется когда свойство AutoFlush имеет значение true или буфер StreamWriter заполнен и содержание буфера может быть записано в базовый поток фиксированного размера.
Пример. В примере в файл посимвольно записывается строка, введенная с клавиатуры.
... using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Ввести строку с клавиатуры string s; Console.WriteLine("Enter string:"); s = Console.ReadLine(); // Разбить строку s на массив типа char[] char[] array = s.ToCharArray(); // Записать посимвольно в поток fOut foreach (char c in array) fOut.Write(c); } ...
⇑
1.3.2. Метод Write(char[]). Запись массива символов
Для записи массива char[] в файл используется метод Write() с последующим объявлением
public override void Write(char[] buffer);
здесь
- buffer – массив символов, содержащий данные, которые должны быть записаны. Если buffer равен null, то ничего не записывается.
При использовании метода Write() возможны исключительные ситуации следующих типов:
- System.IO.IOException — ошибка ввода/вывода;
- System.ObjectDisposedException — возникает в случаях, когда значение свойства AutoFlush = true или буфер StreamWriter является полным и поток вывода является закрытым;
- System.NonSupportedException — генерируется когда свойство AutoFlush имеет значение true или буфер StreamWriter заполнен и содержание буфера может быть записано в базовый поток фиксированного размера.
Пример. В примере в файл записывается массив строк типа string[]. После каждой строки записывается символ новой строки с помощью метода WriteLine().
... using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Исходный массив строк string[] AS = { "line - 1", "line - 2", "line - 3" }; char[] buffer; // Цикл записи массива AS в файл for (int i = 0; i < AS.Length; i++) { // конвертировать строку string в char[] buffer = AS[i].ToCharArray(); // запись buffer в файл fOut.Write(buffer); // перевод строки fOut.WriteLine(); } } ...
⇑
1.3.3. Метод Write(char[], int, int). Запись массива символов с указанием диапазона
Данный метод используется для записи подстроки символов в поток. Объявления метода следующее:
public override void Write(char[] buffer, int index, int count);
здесь
- buffer — массив символов, содержащий данные, которые должны быть записаны;
- index — позиция символа в буфере с которой начинается чтение данных;
- count — максимальное количество символов, которое может быть записано.
При использовании метода могут быть сгенерированы исключения следующих типов:
- System.ArgumentNullException — случай, когда значение buffer = null;
- System.ArgumentException — генерируется в случае, если значение count является больше значения длины буфера минус index;
- System.ArgumentOutOfRangeException — значение index или count отрицательны;
- System.IO.IOException — генерируется ошибка ввода/вывода;
- System.ObjectDisposedException — возникает в случаях, когда значение свойства AutoFlush = true или буфер StreamWriter полон и поток вывода закрыт;
- System.NonSupportedException — генерируется когда свойство AutoFlush имеет значение true или буфер StreamWriter заполнен и содержание буфера может быть записано в базовый поток фиксированного размера.
Пример. В примере в файл записываются первые 5 символов массива строк типа string[]. Все остальные символы отсекаются.
using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Исходный массив строк string[] AS = { "aldkfjasldj", "ladjkflaj", "iouweoiwe" }; // буфер для представления строки как char[] char[] buffer; // Цикл записи массива AS в файл for (int i = 0; i < AS.Length; i++) { // конвертировать строку string в char[] buffer = AS[i].ToCharArray(); // запись buffer в файл fOut.Write(buffer, 0, 5); // записать первые 5 символов // перевод строки fOut.WriteLine(); } }
⇑
1.4. Методы записи строк типа string в поток
1.4.1. Методы Write(string) и WriteLine(string). Запись строки
Методы Write() и WriteLine() с параметром типа string предназначены для записи строки в поток. Объявления методов следующие
public override void Write(string value); public override void WriteLine(string value);
здесь value – строка, которая записывается в поток.
Метод WriteLine() в отличие от метода Write() дополнительно записывает символ новой строки в поток.
При использовании метода могут быть исключения следующих типов:
- System.IO.IOException — ошибка ввода/вывода;
- System.ObjectDisposedException — возникает в случаях, когда значение свойства AutoFlush = true или буфер StreamWriter является полным и поток вывода является закрытым;
- System.NonSupportedException — генерируется когда свойство AutoFlush имеет значение true или буфер StreamWriter заполнен и содержание буфера может быть записано в базовый поток фиксированного размера.
Пример. В примере в файл записывается массив строк типа string[]. Используется метод WriteLine().
... using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Исходный массив строк string[] AS = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; // Цикл записи массива AS в файл for (int i = 0; i < AS.Length; i++) { // метод WriteLine() fOut.WriteLine(AS[i]); } } ...
⇑
1.4.2. Методы Write(string, object) и WriteLine(string, object). Запись в поток форматированной строки с одним аргументом
Данные методы позволяют записывать объект в поток согласно строке, задающей формат вывода. Объявления методов следующее
public override void Write(string format, object arg0) public override void WriteLine(string format, object arg0)
Пример. Записывается в файл число типа double с точностью 3 знака после запятой.
static void Main(string[] args) { using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Запись числа типа double в файл с точностью 3 знака после запятой fOut.Write("{0:f3}", Math.PI); // 3.142 } }
⇑
1.4.3. Методы Write(string, object, object) и WriteLine(string, object, object). Запись форматованной строки с двумя аргументами
public override void Write(string format, object arg0, object arg1); public override void WriteLine(string format, object arg0, object arg1);
Пример. Записать в файл два числа: целое число и число типа float.
using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Запись числа типа int и числа типа float int d = 27; float x = 3.2309f; fOut.Write("{0} {1:f}", d, x); // 27 3.23 }
⇑
1.4.4. Методы Write(string, object, object, object) и WriteLine(string, object, object, object). Запись форматованной строки с тремя аргументами
public override void Write(string format, object arg0, object arg1, object arg2); public override void WriteLine(string format, object arg0, object arg1, object arg2);
Пример. Записать в файл три числа типа int.
using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Запись трех чисел типа int в файл int d1 = 88, d2 = 323, d3 = 15; fOut.Write("{0} {1} {2}", d1, d2, d3); // 88 323 15 }
⇑
1.4.5. Метод Write(string, object[]). Запись форматованной строки с любым количеством аргументов
Объявления методов, которые записывают любое количество произвольных аргументов следующее:
public override void Write(string format, params object[] arg); public override void WriteLine(string format, params object[] arg);
Пример. Задан массив координат отрезков (x1, y1), (x2, y2). Нужно записать в файл эти координаты.
using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Запись массива координат в файл int[,] Lines = { { 2, 5, 3, -1 }, { 4, 7, 2, 9 }, { -1, -3, 2, 8 } }; // Цикл записи массива в файл for (int i = 0; i < Lines.Length / 4; i++) { fOut.WriteLine("x1 = {0}, y1 = {1}, x2 = {2}, y2 = {3}", Lines[i, 0], Lines[i, 1], Lines[i, 2], Lines[i, 3]); } }
⇑
2. Свойства
2.1. Свойство AutoFlush
Возвращает или задает значение, указывающее, будет ли экземпляр StreamWriter очищать буфер после каждого вызова метода Write(System.Char). Объявления метода следующее
public virtual bool AutoFlush { get; set; }
Значение true заставляет StreamWriter очищать свой поток.
Пример.
using (StreamWriter fOut = new StreamWriter("myfile2.txt")) { // Указание очищать буфер fOut.AutoFlush = true; // некоторые действия // ... }
⇑
2.2. Свойство Encoding
Для определения системы кодировки используется свойство Encoding.
public override System.Text.Encoding Encoding { get; }
Система кодировки задается в конструкторе при создании текущего экземпляра. Если система кодировки не задана явно, то по умолчанию устанавливается значение
System.Text.UTF8Encoding
Пример.
// Запись в системе кодировки ASCII using (FileStream fs = new FileStream("myfile2.txt", FileMode.Open, FileAccess.Write)) { using (StreamWriter fOut = new StreamWriter(fs, System.Text.Encoding.ASCII)) { // Записать строку в файл. fOut.WriteLine("Hello world!"); // Записать также текущую систему кодировки // с помощью свойства Encoding string name = fOut.Encoding.BodyName; fOut.WriteLine(name); } }
⇑
Связанные темы
- Классы StreamReader, StreamWriter. Работа с текстовыми файлами. Конструкторы класса StreamReader
- Методы класса StreamReader
- Класс StreamWriter. Назначение. Конструктор. Создание потока вывода разными способами
⇑