Лабораторная работа № 1.2. Разбор исходного файла

Методы статического класса System.IO.File для работы с файлами. Чтение, запись текстового файла. Класс System.IO.StreamReader для реализации потокового чтения из файла.

Классы C#, обеспечивающие работу с файловой системой, расположены в пространстве имен System.IO. Поэтому для доступа к этим классам в коде без указания пространства имен необходимо использовать директиву подключения namespace:

using System.IO;

Статический класс File предоставляет основные функции для работы с файлами, в том числе нужные нам чтение файла в строку и запись строки в файл.

Чтение файла в строку. Для выбора исходного файла в структуре файловой системы используется элемент управления OpenFileDialog. Метод ShowDialog() отобразит диалог выбора файла на экран, а о том, какую кнопку в диалоге нажал пользователь можно узнать, сравнив значение, возвращенное методом с константами статического класса DialogResult. При значении, равном DialogResult.OK путь к выбранному файлу в файловой системе можно получить через свойство FileName экземпляра OpenFileDialog. Это значение нужно передать в метод ReadAllText класса File. Метод вернет нам содержимое исходного файла.

Запись строки в файл. Необходимо использовать метод WriteAllText класса File. В качестве параметров ему передаются имя файла и исходная строка. Широко распространенной практикой является проверка на существование файла перед записью с помощью метода Exists класса File.

Посимвольное чтение из файла. Класс StreamReader предоставляет методы чтения следующего символа, строки или блока в файле. Однако на каждом шаге необходимо сохранять данные о текущей строке, текущем символе и позиции символа в строке. Довольно логичным будет реализовать статический класс-обертку над StreamReader, который обеспечил бы нам не только чтение из файла,но и хранение этих данных. Реализуем этот функционал в классе Reader, созданном в ходе первой лабораторной работы (файл Reader.cs) Ниже приведен псевдокод данного класса.

Reader

{

номерСтроки;

позицияСимволаВСтроке;

текущийСимвол;

StreamReader streamReader;

читатьСледующийСимвол()

{

текущийСимвол = streamReader.Read();

если(текущийСимвол == -1)

текущийСимвол = конецФайла;

иначе если(текущийСимвол == переводСтроки)

{

номерСтроки++;

позицияСимволаВСтроке = 0;

}

иначе если(текущийСимвол == возвратКаретки или текущийСивол == табуляция)

читатьследующийСивол();

иначе

позицияСимволаВСтроке++;

}

инициализировать(путьКФайлу)

{

если файлСуществует(путьКФайлу)

{

streamReader = новый StreamReader(путьКФайлу);

номерСтроки = 1;

позицияСимволаВСтроке = 0;

читатьСледующийСимвол();

}

}

закрыть()

{

streamReader.close();

}

}

Протестировать работу класса Reader в коде формы можно, например, так:

Reader. инициализировать(путьКФайлу);

Пока (Reader.текущийСимвол!= конецФайла)

{

вывести Reader.номерСтроки;

вывести Reader. позицияСимволаВСтроке;

вывести Reader. текущийСимвол;

Reader. читатьСледующийСимвол();

}

Замечания по коду:

1) Все поля и методы должны быть объявлены как static;

2) В соответствии с принципами ООП все поля должны быть закрытыми (это замечание касается всех лабораторных работ). Для чтения полей необходимо реализовать методы-свойства. Ни одно из полей НЕ должно записываться вне класса.

3) Необходимо предусмотреть проблемные ситуации: указан некорректный путь к файлу, многократная инициализация класса (в этом случае необходимо закрывать streamReader перед его пересозданием).

Примеры кода:

Чтение файла в строку.

if(openFileDialog1.ShowDialog() == DialogResult.OK)

{

codeFile = openFileDialog1.FileName.ToString();

string code = System.IO.File.ReadAllText(codeFile);

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: