Статьи

C #. Програма читання / запису текстових файлів. Класи StreamReader, StreamWriter

  1. зміст

У програмі продемонстровано використання класів StreamWriter і StreamReader для читання і запису текстових файлів. Також в програмі використані елементи управління (компоненти) RichTextBox і OpenFileDialog.

зміст

Умова задачі

Розробити програму читання / запису текстових файлів. У програмі повинна бути можливість вибору файлу для читання, його коригування і запис цього файлу на диск.

виконання

1. Запустити MS Visual Studio. Створити проект по шаблону Windows Forms Application

Докладний приклад створення програми за шаблоном Windows Forms Application детально описується тут .

2. Розробка форми додатка

Створити форму як показано на малюнку 1.

На формі розміщуються наступні елементи управління:

  • два елементи управління типу Button. Автоматично буде створено два об'єкти (екземпляри класу Button) з іменами button1 і button2;
  • один елемент управління типу RichTextBox. Автоматично створюється об'єкт з ім'ям richTextBox1;
  • елемент управління типу Label. Створюється об'єкт з ім'ям label1.

Мал Мал. 1. Елементи управління форми додатка

Здійснити налаштування елементів управління типу Button наступним чином:

  • в елементі управління button1 властивість Text = "Відкрити файл ...»;
  • в елементі управління button2 властивість Text = "Зберегти файл».

Налаштування форми додатка Form1:

  • властивість Text = "Читання / запис текстових файлів";
  • властивість MaximizeBox = false (кнопка розгортання на весь екран стає неактивною);
  • властивість FormBorderStyle = "Fixed3D";
  • властивість StartPosition = "CenterScreen".

Також потрібно відкоригувати розміри форми і елементів управління на формі приблизно так, як показано на малюнку 2.

В елементі управління RichTextBox (рис. 3):

  • властивість WordWrap = «false» (перенесення довгих рядків в межах кордонів вікна редактора).

Елемент управління RichTextBox є многострочное редагувати текстові поле, яке працює з текстом у форматі RTF (Rich Text Format - розширений текстовий формат). Текст формату RTF зберігає додаткову службову інформацію, яка управляє властивостями кожного абзацу і зміною шрифту по ходу тексту.

Мал Мал. 2. Форма додатка після коригування та налаштування властивостей

Форма додатка після коригування та налаштування властивостей

Мал. 3. Елемент управління типу RichTextBox

3. Елемент управління OpenFileDialog

Для того, щоб вибрати текстовий файл для читання, потрібно використовувати елемент управління типу OpenFileDialog. Цей елемент управління являє собою стандартне діалогове вікно Windows, призначене для відкриття файлів.

Розмістити на формі компонент OpenFileDialog (рис. 4).

Мал Мал. 4. Елемент управління OpenFileDialog

4. Додавання внутрішніх змінних в текст додатки

Для роботи програми потрібно ввести такі додаткові внутрішні змінні:

  • f_open - визначає, чи вибрав користувач файл командою «Відкрити файл ...»;
  • f_save - визначає, чи був збережений раніше відкритий файл (f_open = true).

Тому, в текст модуля "Form1.cs" потрібно ввести наступний код:

... namespace WindowsFormsApplication1 {public partial class Form1: Form {bool f_open, f_save; // визначають вибір файлу і його збереження public Form1 () {InitializeComponent (); }}} ...

5. Програмування події Load класу форми Form1

Подія Load виникає в момент завантаження форми відразу після запуску програми на виконання. В обробник події доцільно включати початкову ініціалізацію змінних.

В даному випадку, початкової ініціалізації підлягають такі змінні і об'єкти як f_open, f_save, label1, richTextBox1.

У компоненті label1 буде відображатися шлях до вибраного файлу. У компоненті richTextBox1 буде відображатися вміст (текст) обраного файлу.

Лістинг обробника Form1_Load () події Load завантаження форми наступний:

private void Form1_Load (object sender, EventArgs e) {f_open = false; // файл не відкритий f_save = false; label1.Text = "-"; richTextBox1.Text = ""; }

6. Імпорт простору імен System.IO

У даній роботі для читання і запису файлів будуть використані можливості класів StreamWriter і StreamReader з бібліотеки класів мови C #.

Тому, для використання методів цих класів, потрібно на початку коду модуля "Form1.cs" додати рядок:

using System.IO;

Таким чином, верхня частина файлу "Form1.cs" має вигляд:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO;

7. Програмування події кліка на кнопці button1 ( "Відкрити файл ...»)

Для виклику стандартного вікна Windows вибору файлу, користувач повинен вибрати команду «Відкрити файл ...» (button1). Приклад програмування події кліка на кнопці button1 докладно описаний тут .

Лістинг обробника button1_Click () події Click кнопки button1, що здійснює відкриття вікна вибору файлу, наступний:

private void button1_Click (object sender, EventArgs e) {// 1. Відкриття вікна і перевірка, чи вибраний файл if (openFileDialog1.ShowDialog () == DialogResult .OK) {// 2. Вивести ім'я файлу на формі в компоненті label1 label1 .Text = openFileDialog1.FileName; // 3. Встановити прапорці f_open і f_save f_open = true; f_save = false; // 4. Прочитати файл в richTextBox1 // очистити попередній текст в richTextBox1 richTextBox1.Clear (); // 5. Створити об'єкт класу StreamReader і прочитати дані з файлу StreamReader sr = File .OpenText (openFileDialog1.FileName); // додаткова змінна для читання рядка з файлу string line = null; line = sr.ReadLine (); // читання першого рядка // 6. Цикл читання рядків з файлу, якщо рядки вже немає, то line = null while (line! = Null) {// 6.1. Додати рядок в richTextBox1 richTextBox1.AppendText (line); // 6.2. Додати символ перекладу рядка richTextBox1.AppendText ( "\ r \ n"); // 6.3. Вважати наступний рядок line = sr.ReadLine (); } // 7. Закрити з'єднання з файлом sr.Close (); }}

Для виклику стандартного вікна Windows вибору файлу використовується метод ShowDialog () компонента openFileDialog1. Обраний файл зберігається в властивості FileName об'єкта openFileDialog.

Для читання текстового файлу використовується клас StreamReader, який здійснює читання символьних даних з файлу. Щоб створити екземпляр класу StreamReader використовується метод OpenText () класу File. Клас File містить ряд методів, які добре підходять для спрощеного читання символьних даних.

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

Читання рядків здійснюється в локальну змінну line.

Щоб додати рядок до об'єкта richTextBox1, використовується метод AppendText ().

8. Програмування події зміни тексту в компоненті RichTextEdit

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

У компоненті richTextBox1 є подія TextChanged, яке викликається в момент зміни тексту в редакторі (рис. 5).

Мал Мал. 5. Подія TextChanged елемента управління richTextBox1

Обробник події TextChanged має наступний вигляд:

private void richTextBox1_TextChanged (object sender, EventArgs e) {f_save = false; }

9. Програмування події кліка на кнопці "Зберегти файл"

Для збереження зміненого тексту в файлі потрібно вибрати команду «Зберегти файл» (кнопка button2). Щоб зберегти відредаговану в richTextBox1 файлу використовуються методи класу StreamWriter.

Лістинг обробника події кліка на кнопці button2 наступний:

private void button2_Click (object sender, EventArgs e) {// 1. Перевірка, чи відкритий файл if (! f_open) return; // 2. Якщо файл відкритий, то перевірка - збережений він if (f_save) return; // 3. Створення об'єкта типу StreamWriter і отримання малих даних StreamWriter sw = File .CreateText (openFileDialog1.FileName); // 4. Читання рядків з richTextBox1 і додавання їх в файл string line; for (int i = 0; i <richTextBox1.Lines.Length; i ++) {// 4.1. Читання одного рядка line = richTextBox1.Lines [i] .ToString (); // 4.2. Додавання цього рядка в файл sw.WriteLine (line); } // 5. Закрити об'єкт sw sw.Close (); }

Пояснимо деякі фрагменти коду.

У обробнику події button2_Click після перевірки на наявність відкритого файлу створюється об'єкт (змінна) з ім'ям sw типу StreamWriter.

При створенні об'єкта використовується метод CreateText () з типу File, що повертає екземпляр типу StreamWriter. Файл зберігається у властивості openFileDialog1.FileName.

Для доступу до введених рядків компонента richTextBox використовується властивість Lines, яке є масивом рядків.

Щоб додати один рядок, потрібно викликати метод WriteLine () об'єкта sw типу StreamWriter.

пов'язані теми

Новости