Класс Stream. Операции (методы) записи в файловый поток. Примеры
Данная тема есть продолжением темы:
Содержание
- 1. Операции записи в поток. Краткий обзор
- 2. Свойство CanWrite. Пример
- 3. Метод Write(). Пример
- 4. Метод WriteByte(). Пример
- Связанные темы
Поиск на других ресурсах:
1. Операции записи в поток. Краткий обзор
Для записи в поток используются следующие свойства и методы (операции):
- свойство CanWrite — определяет возможность потока осуществлять запись;
- метод Write() — записывает последовательность байт в текущий поток;
- метод WriteByte() — записывает байт в текущий поток.
⇑
2. Свойство CanWrite. Пример
С помощью свойства CanWrite можно определить, поддерживает ли поток запись данных. Общая форма свойства следующая:
public abstract bool CanWrite { get; }
Если поток допускает возможность записи, то свойство CanWrite возвращает true. Иначе возвращается false.
Пример. В примере создается поток stream, который связан с файлом «myfile.txt». Затем с помощью свойства CanWrite определяется, поддерживает поток запись.
using System; using System.IO; namespace ConsoleApp10 { class Program { static void Main(string[] args) { // 1. Создать поток и связать его с файлом "myfile.txt" Stream stream; using (stream = new FileStream("myfile.txt", FileMode.Create)) { // 2. Свойство CanWrite - определить, допускает ли поток запись if (stream.CanWrite) Console.WriteLine("Stream supports writing."); else Console.WriteLine("Stream does not support writing"); // 3. Закрыть поток stream.Close(); } } } }
⇑
3. Метод Write(). Пример
Метод Write() предназначен для записи последовательности байт в текущий поток. Общая форма метода следующая:
public abstract void Write(byte[] buffer, int offset, int count);
здесь
- buffer — массив байт которые копируются в текущий поток;
- offset — смещение в массиве buffer, с которого начинается копирование байт в текущий поток;
- count — количество байт, которые должны быть записаны в текущий поток.
Пример. В примере записывается двумерный массив типа int[] в бинарный файл. Затем этот массив считывается из файла для контроля.
using System; using System.IO; namespace ConsoleApp10 { class Program { static void Main(string[] args) { // Записать массив строк в файл using (FileStream fw = new FileStream("integers.dat", FileMode.Create, FileAccess.Write)) { // Исходный массив целых чисел int[,] AI = { { 2, 3, 5}, { 1, 8, 7 }, { 4, 2, 3 }, { -1, -2, 0 } }; // Дополнительные переменные byte[] AB; // Сначала записать размерность массива 3*4 // Количество строк int rows = AI.GetLength(0); AB = BitConverter.GetBytes(rows); fw.Write(AB, 0, AB.Length); // Количество столбцов int columns = AI.Length / AI.GetLength(0); AB = BitConverter.GetBytes(columns); fw.Write(AB, 0, AB.Length); // Цикл записи чисел for (int i = 0; i < rows; i++) for (int j = 0; j < columns; j++) { // записать число AI[i, j] AB = BitConverter.GetBytes(AI[i, j]); fw.Write(AB, 0, AB.Length); } } // Считать из файла массив строк using (FileStream fr = new FileStream("integers.dat", FileMode.Open, FileAccess.Read)) { // Результирующий массив int[,] AI2; // Дополнительные переменные int rows, columns; byte[] AB; // Прочитать количество строк AB = new byte[sizeof(int)]; fr.Read(AB, 0, AB.Length); rows = BitConverter.ToInt32(AB, 0); // Считать количество столбцов AB = new byte[sizeof(int)]; fr.Read(AB, 0, AB.Length); columns = BitConverter.ToInt32(AB, 0); // Выделить память для массива ссылок AI2 = new int[rows, columns]; // Цикл чтения чисел типа int for (int i = 0; i < rows; i++) for (int j = 0; j < columns; j++) { fr.Read(AB, 0, AB.Length); AI2[i, j] = BitConverter.ToInt32(AB, 0); } // Вывести результат Console.WriteLine("rows = {0}, columns = {1}", rows, columns); for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { Console.Write("{0} ", AI2[i, j]); } Console.WriteLine(); } } } } }
Результат выполнения программы
rows = 4, columns = 3 2 3 5 1 8 7 4 2 3 -1 -2 0
⇑
4. Метод WriteByte(). Пример
Метод WriteByte() предназначен для записи в поток (файл) в текущей позиции одного байта. Согласно документации C# общая форма метода WriteByte() следующая:
public virtual void WriteByte(byte value)
здесь value – байт, который нужно записать.
Пример. В примере сочетаются методы WriteByte() и ReadByte(). Нужно записать строку в файл методом WriteByte(). Затем эта строка считывается методом ReadByte().
using System; using System.IO; namespace ConsoleApp10 { class Program { static void Main(string[] args) { // Демонстрация сочетания методов WriteByte() и ReadByte() using (FileStream fWrite = new FileStream("myfile.bin", FileMode.Create, FileAccess.Write)) { // Строка, которую нужно записать в файл string str = "bestprog.net"; // Цикл побайтной записи - метод WriteByte() foreach (char c in str) fWrite.WriteByte((byte)c); } // Считывание строки из файла using (FileStream fRead = new FileStream("myfile.bin", FileMode.Open, FileAccess.Read)) { // Дополнительные переменные string str2 = ""; // результирующая строка int bt; // Цикл побайтного чтения из файла - метод ReadByte() while ((bt = fRead.ReadByte()) != -1) str2 += (char)bt; // прибавить к строке прочитанный байт как символ // Вывести результат на экран Console.WriteLine(str2); } } } }
⇑
Связанные темы
- Класс Stream. Обзор методов. Методы чтения из потока. Примеры
- Класс Stream. Методы (операции) поиска в потоке. Примеры
⇑