Клас 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. Призначення. Конструктори. Створення потоку виводу різними способами
⇑