Клас 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. Методи (операції) пошуку в потоці. Приклади
⇑