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

  1. содержание

В программе продемонстрировано использование классов StreamWriter и StreamReader для чтения и записи текстовых файлов.

Также в программе использованы элементы управления RichTextBox и OpenFileDialog.

содержание

Условие задачи

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

выполнение

1. Скачать Microsoft 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. Программирование события клика на кнопке button 1 ( "Открыть файл ...»)

Для вызова стандартного окна 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 объекта openFileDialog1.

Для чтения текстового файла используется класс 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.

связанные темы