C#. Клас StreamWriter. Огляд методів та властивостей




Клас StreamWriter. Огляд методів та властивостей

Дана тема є продовженням теми:


Зміст


Пошук на інших ресурсах:

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);
  }
}

 


Зв’язані теми