- •Язык c# и структура простой программы
- •Что такое .Net Framework
- •Что такое с#
- •Создание первой программы на с#
- •Пространство имен System
- •С# как язык Объектно-Ориентированного Программирования (ооп)
- •Состав и назначение файлов проекта
- •Структура сборки
- •Элементы языка c#
- •Базовый синтаксис с#
- •Переменные
- •Числа без знака
- •Числа со знаком
- •Числа для финансистов
- •Текстовые символы
- •Логический тип данных
- •Литералы с плавающей точкой
- •Символьные литералы
- •Строковые литералы
- •Выражения и операторы с#
- •Инициализация переменных и оператор присваивания
- •Значение в левой части
- •Ввод данных с консоли
- •Математические операторы
- •Вычисление остатка при целочисленном делении
- •Унарные операторы
- •Унарное логическое отрицание
- •Составные операторы
- •Поразрядные операторы
- •Поразрядное логическое и
- •Поразрядное логическое или
- •Поразрядное логическое исключающее или
- •Унарная поразрядная операция дополнения
- •Поразрядный сдвиг
- •Пример использования поразрядных операторов
- •Логические операторы
- •Операторы отношения
- •Приоритеты операторов
- •Исполнители алгоритмов
- •Исполнитель Чертежник
- •Исполнитель Робот
- •Компьютер как формальный исполнитель алгоритмов
- •Блок-схема
- •Псевдокод
- •Необходимые свойства алгоритма
- •Понятие о временной сложности алгоритма
- •Примеры
- •Правила для определения сложности
- •Тернарный условный оператор
- •Применение логических операций
- •Конструкция выбора
- •Примеры применения оператора выбора
- •Объединение меток case
- •Пропущенный break
- •Пример программы: Простые числа
- •Пример обработки одномерного массива чисел
- •Использование генератора случайных данных
- •Использование оператора foreach
- •Типы задач обработки одномерных числовых массивов
- •Поиск элемента в массиве
- •Многомерные массивы
- •Базовые операции со строками
- •Методы типа string
- •Копирование и клонирование строк
- •Конкатенация строк
- •Извлечение подстроки
- •Вставка подстроки
- •Замена символов и строк
- •Удаление символов из строки
- •Удаление незначащих пробелов
- •Преобразование к верхнему и нижнему регистру
- •Выравнивание по левому и правому краю поля
- •Объединение массива строк
- •Разбор строки
- •Сравнение строк
- •Форматирование текстовых строк
- •Функции
- •Описание и использование функций
- •Возвращаемые значения
- •Передача параметров
- •Выходные параметры
- •Область действия переменных
- •Область действия переменных и управляющие конструкции
- •Рекурсия
- •Параметры функции Main()
- •Перегрузка функций
- •Перечислимый тип
- •Определение перечислимых типов
- •Структуры
- •Описание структур
- •Использование структур в качестве параметров функций
- •Использование структур в качестве возвращаемых значений функций
- •Функции структур
- •Файлы и потоки
- •Основные классы ввода и вывода
- •Классы для работы с потоками
- •Классы для работы с потоками текстовых символов
- •Работа с текстовыми файлами
Классы для работы с потоками
На базе класса System.IO.Stream создано несколько производных классов, специально предназначенных для работы с потоками ввода и вывода.
Класс FileStream, как это видно из его названия, предназначен для работы с файлами через потоки ввода и вывода. Он обеспечивает позиционирование внутри потоков ввода и вывода методом Seek. Это позволяет выполнять прямой доступ к файлам.
С помощью класса CryptoStream можно организовать ввод и вывод данных в зашифрованном виде.
Класс MemoryStream позволяет создавать файлы в оперативной памяти. Доступ к таким файлам осуществляется очень быстро, так как не требуется работать с медленными дисковыми устройствами. Обычно файлы в оперативной памяти создаются для временного хранения данных, потому что после выключения компьютера содержимое этих файлов исчезнет.
С помощью класса NetworkStream можно осуществлять удаленный ввод и вывод данных через сетевое соединение.
Класс BufferedStream обеспечивает буферизацию при работе с потоками ввода и вывода. Буферизация операций ввода и вывода в большинстве случаев значительно ускоряет работу приложений, так как при ее использовании сокращается количество обращений к системе для обмена данными с внешними устройствами.
Классы для работы с потоками текстовых символов
Специально для работы с потоками текстовых символов в кодировке UNICODE в библиотеке классов Microsoft .NET Framework предусмотрены классы System.IO.TextReader и System.IO.TextWriter. Первый из этих классов предназначен для потоков ввода, а второй — для потоков вывода.
С помощью класса StreamReader, созданного на основе класса System.IO.TextReader, программа может читать отдельные байты входного потока символов. Аналогично класс StreamWriter, созданный на основе класса System.IO.TextWriter, позволяет писать байты символов в выходной поток.
Классы StringReader и StringWriter, созданные на базе классов System.IO.TextReader и System.IO.TextWriter, соответственно предназначены для чтения и записи текстовых строк, т.е. данных типа string.
Перечисления
При работе с потоками, файлами и каталогами используются перечисления FileAccess, FileMode, FileShare и SeekOrigin. Они содержат определения констант, нужных для определения режимов создания и открытия файлов, режимов совместного доступа к файлу, а также позиции при произвольном доступе к файлам.
Все эти константы будут рассматриваться далее по мере изложения материала этого раздела.
Создание потоков, связанных с файлами
Если вам нужно создать входной или выходной поток, связанный с локальным файлом, содержащим двоичные данные, следует воспользоваться классами BinaryWriter и BinaryReader из библиотеки Microsoft .NET Framework. Что же касается чтения из файла или записи в файл текстовых данных, то для решения этой задачи обычно используются классы StreamReader и StreamWriter.
В любом случае, перед тем как читать данные из файла или записывать их в файл, необходимо выполнить операцию открытия потока, связанного с файлом. Когда работа с файлом окончена, соответствующий поток необходимо закрыть явным образом.
Обращаем ваше внимание на то, что система сборки мусора, встроенная в среду исполнения Microsoft .NET Framework, следит за использованием только объектов, находящихся в оперативной памяти, таких, как переменные, массивы, экземпляры объектов, созданных на базе классов и т. п. Что же касается потоков, связанных с файлами, то программист сам обязан следить за их открытием и закрытием.
