Класс StreamWriter. Назначение. Конструкторы. Создание потока вывода разными способами
Данная тема есть родственной теме:
Содержание
- 1. Класс StreamWriter. Назначение
- 2. Конструкторы класса StreamWriter. Создание потока связанного с текстовым файлом
- 3. Применение оператора using() при создании потока вывода
- 4. Пример создания файла с нулевой длиной средствами StreamWriter. Самый простой способ использования конструктора
- Связанные темы
Поиск на других ресурсах:
1. Класс StreamWriter. Назначение
Класс StreamWriter предназначен для записи в поток символьных данных. Данный класс является унаследованным от абстрактного класса TextWriter и реализует часть его методов. На рисунке 1 изображен перечень основных методов, которые наследует класс StreamWriter.
Рисунок 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 в текущем (относительно исполняемого файла) каталоге.
⇑
Связанные темы
- Классы StreamReader, StreamWriter. Работа с текстовыми файлами. Конструкторы класса StreamReader
- Методы класса StreamReader
- Класс StreamWriter. Обзор методов и свойств
⇑