Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 7. Робота з файлами.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
130 Кб
Скачать
☆

7.4. Класи StreamReader, StreamWriter, StringReader, StringWriter

Ці класи лежать в основі роботи з текстовими файлами і дозволяють працювати з потоком як з текстовим файлом, читаючи і записуючи в потік дані різних скалярних типів. Клас Reader є нащадком абстрактного класу TextReader, клас Writer – нащадком класу TextWriter. Класи StringReader і StringWriter дозволяють розглядати рядок як потік.

  • StreamReader – містить властивості і методи, що забезпечують читання даних з текстового файлу як потоку байтів.

  • StreamWriter – містить властивості і методи, що забезпечують запис символів в байтовий потік.

Таблиця 7.3. Основні методи класу StreamReader

Метод

Призначення

int Read()

int Read (char[] buff, int index, int count)

має дві реалізації. Перша повертає черговий символ, прочитаний з потоку, пересуваючи покажчик потоку вправо. Друга реалізація дозволяє прочитати задане число символів з потоку в масив, переданий як аргумент методу Read

int ReadBlock(char[] array, int offset, int count)

дозволяє прочитати задане число символів з потоку в масив

int Peek()

читає наступний символ, не змінюючи стан покажчика потоку. Повертає наступний доступний символ, не прочитуючи його насправді з потоку вхідних даних

string ReadLine()

читає і повертає черговий рядок тексту з потоку. Це означає, що читаються символи потоку, поки не зустрінуться символи кінця рядка або кінця файлу. Якщо в потоці символів немає і досягнутий кінець файлу, то в результаті повертається null – посилання на відсутнє значення.

string ReadToEnd()

читає всі символи з потоку, що залишилися, аж до кінця файлу

void Close()

закриває вхідний потік

Таблиця 7.4. Основні методи класу StreamWriter

Метод

Призначення

Write

має різні реалізації для виведення різних типів даних.

WriteLine (...)

виводить у потік дані, розділяючи їх символами кінця рядка

void Close()

закриває потік

Приклад 7.3. В цьому прикладі спочатку створюється об'єкт f класу StreamWriter, який містить файл для виводу output.txt. Далі визначаються і ініціалізуються змінна int i та string s, які записуються у вихідний файл. Метод Close() закриває файл.

using System.IO; // 1

namespace ConsoleApplication1

{ class Class1

{ static void Main()

{

StreamWriter f = new StreamWriter( "output.txt" ); // 2

int i = 3;

string s = "Мова програмування С# - це C++++ ";

f.WriteLine( "i = " + i ); // 3

f.WriteLine( "s = " + s ); // 4

f.Close(); // 5

}

}

}

Таким чином, щоб використовувати в програмі файли, необхідно:

  1. Підключити простір імен, в якому описуються стандартні класи для роботи з файлами (оператор 1).

  2. Оголосити файлову змінну і зв'язати її з файлом (оператор 2).

  3. Виконати операції введення-виводу (оператори 3–4).

  4. Закрити файл (оператор 5).

Приклад 7.4.

Введення даних з файлу виконується аналогічно. У наступному прикладі наведено програму, в якій введення виконується з файлу з іменем input.txt, розташованому в каталозі D:\C#.

using System;

using System.IO;

namespace ConsoleApplication1

{ class Class1

{ static void Main()

{

StreamReader f = new StreamReader( "d:\\C#\\input.txt" );

string s = f.ReadLine();

Console.WriteLine( "s = " + s );

char c = (char)f.Read();

f.ReadLine();

Console.WriteLine( "c = " + c );

string buf;

buf = f.ReadLine();

int i = Convert.ToInt32( buf );

Console.WriteLine( i );

buf = f.ReadLine();

double x = Convert.ToDouble( buf );

Console.WriteLine( x );

buf = f.ReadLine();

double y = double.Parse( buf );

Console.WriteLine( y );

buf = f.ReadLine();

decimal z = decimal.Parse( buf );

Console.WriteLine( z );

f.Close();

}

}

}

Приклад 7.5. Збереження в текстовому файлі (для Windows Forms)

//створюємо об'єкт myfile класу FileInfo - це файл, в який будемо виводити

//властивість Application.StartupPath - шлях до програми в період виконання

System.IO.FileInfo myfile = new FileInfo(Application.StartupPath + "\\tests.txt");

//потік для запису StreamWriter. Створюємо об'єкт sw

System.IO.StreamWriter sw;

//якщо файл з таким іменем існує, видаляємо його

if (myfile.Exists)

{

myfile.Delete();

}

//якщо файлу немає - створюємо його і відкриваємо потік для запису

sw = myfile.CreateText(); //створюємо потік, який записує текст в новий файл

sw.Write(txtOut.Text); //метод Write записує рядок у файл

sw.Close(); //метод Close закриває файл

Приклад 7.6. Читання текстового файлу

using System;

using System.IO;

public class TextFromFile

{

private const string FILE_NAME = "MyFile.txt";

public static void Main(String[] args)

{

if (!File.Exists(FILE_NAME))

{

Console.WriteLine("{0} does not exist.", FILE_NAME);

return;

}

using (StreamReader sr = File.OpenText(FILE_NAME))

{

String input;

while ((input=sr.ReadLine())!=null)

{

Console.WriteLine(input);

}

Console.WriteLine ("The end of the stream has been reached.");

sr.Close();

}

}

Висновки

В С# є велика кількість методів, які забезпечують введення і виведення на консоль і в текстовий файл. Для роботи з консоллю призначений клас System.Consol.

Для роботи з файлами і потоками використовуються класи FileStream, StreamWriter, StreamReader, FileInfo і інші класи.

Для введення і виведення даних не потоками, а рядками призначені класи StringReader, StringWriter.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]