C#. Клас StreamWriter. Призначення. Конструктори




Клас StreamWriter. Призначення. Конструктори. Створення потоку виводу різними способами

Дана тема є спорідненою з темою:


Зміст


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

1. Клас StreamWriter. Призначення

Клас StreamWriter призначений для запису в потік символьних даних. Даний клас є успадкованим від абстрактного класу TextWriter і реалізує частину його методів. На рисунку 1 зображено перелік основних методів, які успадковує клас StreamWriter.

C#. Перелік основних методів та властивостей, які успадковує клас StreamWriter від класу TextWriterРисунок 1. Перелік основних методів та властивостей, які успадковує клас StreamWriter від класу TextWriter

Більш детально про оголошення та використання методів класу StreamWriter описується в наступній темі.

 

2. Конструктори класу StreamWriter. Створення потоку, зв’язаного з текстовим файлом

Клас StreamWriter містить значну кількість конструкторів, призначених для створення потоку виводу різними способами.

2.1. Конструктори, які створюють потік виводу на основі шляху до файлу

 

public StreamWriter(string path)
public StreamWriter(string path, bool append)
public StreamWriter(string path, bool append, System.Text.Encoding encoding)
public StreamWriter(string path, bool append, System.Text.Encoding encoding, int bufferSize)

тут

  • path – шлях до файлу, наприклад “C:\\1\\myfile.txt”;
  • append – прапорець, що визначає можливість додавання даних в кінець файлу. Якщо append=true, то дані додаються в кінець файлу. Інакше дані перезаписуються;
  • encoding – кодування символів;
  • bufferSize – розмір буферу для запису у файл. Запис у файл відбувається порціями розміром bufferSize.

При використанні конструкторів можуть виникати виключні ситуації наступних типів:

  • System.UnautorizedAccessException – генерується, коли доступ заборонено;
  • System.ArgumentException – виникає, коли шлях path є пустим або містить ім’я системного пристрою (наприклад, com1, com2, lpt1 тощо);
  • System.ArgumentNullException – виникає, коли значення path=null;
  • System.IO.DirectoryNotFoundException – генерується, коли визначений шлях path є неправильним;
  • System.IO.IOException – значення path включає некоректний синтаксис в імені файлу, директорію чи мітки тома;
  • System.IO.PathTooLongException – виникає коли значення path і/або ім’я файлу перевищують максимально-допустиму довжину визначену системою;
  • System.Security.SecurityException – виникає коли викликаючи потік не має необхідного дозволу.

Приклад.

// Підключити простори імен System, System.IO
using System;
using System.IO;

...

try
{
  // Створення різних файлових потоків
  // 1. Потік, зв'язаний з файлом "file1.txt"
  StreamWriter fOut1 = new StreamWriter("file1.txt");

  // 2. Потік, зв'язаний з файлом "file2.txt"
  StreamWriter fOut2 = new StreamWriter("file2.txt", false);

  // 3. Потік, зв'язаний з файлом "file3.txt"
  StreamWriter fOut3 = new StreamWriter("file3.txt", false, System.Text.Encoding.UTF8);

  // 4. Потік, що зв'язаний з файлом "file4.txt"
  StreamWriter fOut4 = new StreamWriter("file4.txt", false, System.Text.Encoding.ASCII, 1024);

  // Виконання дій в потоках
  // ...

  // Закрити потоки
  fOut1.Close();
  fOut2.Close();
  fOut3.Close();
  fOut4.Close();
}
catch (UnauthorizedAccessException e)
{
  Console.WriteLine("UnauthorizedException");
}
catch (ArgumentException e)
{
  Console.WriteLine("Agrument error.");
}
catch (DirectoryNotFoundException e)
{
  Console.WriteLine("Directory not found.");
}
catch (IOException e)
{
  Console.WriteLine("Input/output error.");
}
catch(System.Security.SecurityException e)
{
  Console.WriteLine("Security error.");
}

...

 

2.2. Конструктори, які створюють файловий потік виводу на основі іншого потоку

На основі іншого потоку типу Stream можна створювати потік виводу типу StreamReader. Для цього використовуються наступні конструктори:

public StreamWriter(System.IO.Stream stream)
public StreamWriter(System.IO.Stream stream, System.Text.Encoding encoding)
public StreamWriter(System.IO.Stream stream, System.Text.Encoding encoding, int bufferSize)
public StreamWriter(System.IO.Stream stream, System.Text.Encoding encoding = null], [int bufferSize = -1], bool leaveOpen = False])

тут

  • stream – потік типу Stream. Клас Stream є базовим для всіх класів потоків;
  • encoding – система кодування;
  • bufferSize – розмір буферу в байтах;
  • leaveOpen – якщо leaveOpen=true, то потік залишається відкритим після видалення об’єкту StreamWriter, інакше leaveOpen=false.

Приклад.

// Підключити простори імен System, System.IO
using System;
using System.IO;

...

try
{
  // Створення файлових потоків на основі других потоків

  // 1. Зв'язок з файлом "file1.txt" в кодуванні UTF-8
  FileStream fs1 = new FileStream("file1.txt", FileMode.Open,
FileAccess.Write);
  StreamWriter fOut1 = new StreamWriter(fs1, System.Text.Encoding.UTF8);

  // 2. Потік, зв'язаний з файлом "file2.txt"
  FileStream fs2 = new FileStream("file2.txt", FileMode.Open, FileAccess.Write);
  StreamWriter fOut2 = new StreamWriter(fs2);

  // Виконання дій в потоках
  // ...

  // Закрити потоки
  fOut1.Close();
  fOut2.Close();
}
catch (System.Exception e)
{
  Console.WriteLine(e.Message);
}

...

 

3. Застосування оператора using() при створенні потоку виводу

Для того, щоб не звільнять ресурси, виділені для файлового потоку, можна скористатись оператором using(). Цей оператор дозволяє звільняти ці ресурси автоматично.

Приклад. У прикладі створюється декілька потоків з допомогою оператора using().

// Підключити простори імен System, System.IO
using System;
using System.IO;

...

// Створення файлових потоків на основі других потоків
// З використанням оператора using()
using (FileStream fs1 = new FileStream("file1.txt", FileMode.Open, FileAccess.Write),
  fs2 = new FileStream("file2.txt", FileMode.Open, FileAccess.Write))
{
  using (StreamWriter fOut1 = new StreamWriter(fs1, System.Text.Encoding.UTF8),
    fOut2 = new StreamWriter(fs2))
  {
    // Виконання дій в потоках
    // ...
  }
}

...

 

4. Приклад створення файлу з нульовою довжиною засобами StreamWriter. Найпростіший спосіб використання конструктора

Щоб створити файл з нульовою довжиною (без даних) з допомогою класу StreamWriter, достатньо написати наступний код

...

// Підключити простір імен System.IO
using System.IO;

...

// Оголосити екземпляр класу StreamWriter
StreamWriter fOut = new StreamWriter("myfile1.txt");

// Закрити потік
fOut.Close();

...

У прикладі вище, створюється файл з іменем myfile1.txt в поточному (відносно виконавчого файлу) каталозі.

 


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