- •Решение прикладных задач в среде c#
- •Введение
- •1. Введение в visual studio.Net. Структура .Net-приложений. Метод main(). Создание проектов с помощью vs.Net
- •Задание 1
- •Операции ввода/вывода. Формат вывода
- •Задание 2
- •Пространство имён system. Класс math. Преобразование типов данных
- •Задание 3.1
- •Задание 3.2
- •4. Операторы языка программирования с#.
- •4.1. Операторы языка программирования с#
- •If (логическое выражение)
- •2. If (выражение)
- •4.2. Операции отношения и условные логические операции
- •Операции отношения в c#
- •Условные логические операции
- •Задания 4
- •Организация циклов
- •Задание 5.2
- •Обработка одномерных массивов
- •6.1. Массивы
- •6.2. Одномерные массивы
- •Класс System.Array и оператор foreach
- •Основные элементы класса Array
- •Задание 6
- •Обработка двумерных массивов
- •7.1. Описания двумерного массива
- •7.2. Обработка исключительных ситуаций
- •Задание 7
- •Запись исходных данных в файл и чтение данных из файла. Цифровая фильтрация. Идентификация объекта управления
- •8.1. Данные для моделирования системы. Понятие файла данных
- •8.2. Объект FileStream для работы с файлами
- •8.3. Запись данных в файл. Класс StreamWriter
- •8.4. Чтение файла. Класс StreamReader
- •8.5. Цифровая фильтрация
- •8.6. Идентификация объекта управления
- •8.7. Определение постоянной времени объекта управления
- •Задание 8.1
- •Задание 8.2
- •Рекомендации
- •Задание 8.3
- •Строки типа string
- •Основные элементы класса System.String
- •Задание 9
8.2. Объект FileStream для работы с файлами
Объект FileStream представляет поток, указывающий на какой-либо файл на диске или на местоположение в сети. Хотя этот класс и обладает методами для чтения из файлов и записи в файлы байтов, чаще для выполнения этих функций вам придется обращаться к классам StreamReader и StreamWriter. Это происходит потому, что класс FileStream оперирует байтами и массивами байтов, в то время как классы Stream оперируют символьными данными. Иметь дело с символьными данными оказывается проще, однако придется столкнуться с некоторыми операциями, например, с произвольным доступом к файлам, которые могут осуществляться только посредством объекта FileStream.
Существует несколько способов создания объекта FileStream. Его конструктор обладает большим количеством перегрузок/версий, однако в самом простом случае он требует передачи двух аргументов
— имени файла и значения перечислимого типа FileMode:
FileStream aFile = new FileStream("1.txt", FileMode.OpenOrCreate);
У перечислимого типа FileMode (табл.8.1) имеется несколько членов, которые позволяют задавать то, каким образом файл открывается или создается. Допускается их использование в различных сочетаниях.
Таблица 8.1
Тип FileMode
Элементы перечисляемого типа FileMode |
Описание |
Append |
Открывает файл (если он существует), переводит указатель файла в его конец или создает новый файл. FileMode.Append может использоваться только совместно с членом перечислимого типа FileAccess.Write. |
Create |
Создает новый файл; если файл с таким именем уже существует, то он уничтожается. |
CreateNew |
Создает новый файл; если файл с таким именем уже существует, то будет сгенерирована исключительная ситуация. |
Open |
Открывает существующий файл. Если указанного файла не существует, генерируется исключительная ситуация. |
OpenOrCreate |
Определяет, что если такой файл существует, то он должен быть открыт, в противном случае создается новый файл. Если такой файл существует, вся информация в нем сохраняется. |
Truncate |
Открывает существующий файл, а вся информация, которая в нем хранилась, уничтожается. После этого мы получаем возможность записать в файл абсолютно новую информацию, однако при этом дата создания файла остается прежней. Этот файл должен существовать, иначе будет сгенерирована исключительная ситуация. |
Приведенный выше пример конструктора по умолчанию открывает файл в режиме чтение/запись. Для того чтобы задать другой уровень доступа, следует использовать дополнительный параметр — FileAccess:
FileStream f = new FileStream("1.txt", FileMode.OpenOrCreate, FileAcces.Write);
Эта строка кода откроет файл с разрешением доступа на запись. Любая попытка прочитать содержимое этого файла приведет к возникновению исключительной ситуации. Перечислимый тип FileAccess обладает всего тремя типами: Read, Write и ReadWrite. Это свойство используется в качестве одного из способов варьирования уровня доступа пользователя к файлу в зависимости от уровня его прав.
Оба класса File и Filelnfo предоставляют методы OpenRead() и OpenWrite(), которые облегчают создание объектов FileStream. Первый открывает метод с режимом доступа "только чтение", а второй, кроме того, разрешает осуществлять запись. Это позволяет упростить обращение к файлу, так что теперь не придется указывать всю информацию, как в предыдущих примерах. Например, следующая строка открывает файл Data.txt в режиме "только чтение":
Работа с объектом FileStream достаточна сложна, поэтому может возникнуть вопрос, нет ли какого- либо более простого способа. Не стоит беспокоиться — обычно вся работа с объектом FileStream оказывается скрытой от пользователя за счет работы с объектами StreamWriter и StreamReader и использования их методов для выполнения манипуляций над файлами. Если перед вами не стоит задача перемещать указатель файла на произвольную позицию, то здесь эти классы позволяют значительно упростить работу с файлами.