- •1.2 Понятия приложения, проекта, решения
- •1.3 Среда разработки Visual Studio .Net
- •1.4 Создание первого проекта
- •1. 5 Компиляция и выполнение программы в среде clr
- •2.1 Основы технологии ооп
- •2.2 Состав языка
- •2.3 Типы данных
- •2.4 Переменные и константы
- •2.5 Организация ввода-вывода данных. Форматирование
- •3.1 Некоторые операции с#
- •Отрицание:
- •Условная операция.
- •3.2 Выражения и преобразование типов
- •3.3 Перечень операций
- •3.4 Математические функции языка с#
- •4.1 Операторы следования
- •4.2 Операторы ветвления
- •4.3 Операторы цикла
- •4.4 Операторы безусловного перехода
- •5.1 Методы: основные понятия
- •5.2 Перегрузка методов
- •6.1 Прямая рекурсия
- •6.2 Косвенная рекурсия
- •7.1 Оператор try
- •7.2 Операторы checked и unchecked
- •7.3 Генерация собственных исключений
- •7.4 Приемы использования обработчиков исключений
- •8.1 Одномерные массивы
- •8.2 Массив как параметр
- •8.3 Массив как объект
- •8.4 Многомерные массивы
- •8.5 Ступенчатые массивы
- •8.6 Оператор foreach и его использование при работе с массивами
- •Примеры
- •9.1 Символы char
- •9.2 Неизменяемые строки string
- •9.3 Изменяемые строки
- •Вариант 1
- •Вариант 2
- •Редактирование текста;
- •10.1 Метасимволы в регулярных выражениях
- •10.2 Поиск в тексте по шаблону
- •10.3 Редактирование текста
- •11.1 Байтовый поток
- •11.2 Символьный поток
- •11.3 Двоичные потоки
- •11.4 Перенаправление стандартных потоков
- •Практикум
- •12.1.Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo
- •12.2 Класс FileSystemInfo
- •12.3 Класс DirectoryInfo
- •12.4 Класс Directory
- •2. Реализуем метод, позволяющий получить по имени узла полное имя соответствующей папки
- •12.2 Работа с файлами
- •12.5 Класс File
- •13.1. Классы: основные понятия, данные, методы, конструкторы, свойства
- •13.2 Данные: поля и константы
- •13.3 Методы
- •Конструкторы экземпляра
- •13.4 Конструкторы класса
- •13.5 Свойства
- •13.6 Один класс - один файл
- •13.7. Классы: деструкторы, индексаторы Деструкторы
- •Индексаторы
- •13.8 Операции класса
- •14.1 Иерархия и наследование
- •Использование защищенного доступа
- •14.2 Наследование конструкторов
- •Позволяет вызвать конструктор базового класса:
- •Позволяет получить доступ к члену базового класса, который скрыт "за" членом производного класса.
- •14.3 Многоуровневая иерархия
- •14.4 Переменные базового класса и производного класса
- •14.5 Виртуальные методы
- •14.6 Абстрактные методы и классы
- •14.7 Запрет наследования
- •Самостоятельная работа
- •15.1. Пользовательские и стандартные интерфейсы
- •15.2 Стандартные интерфейсы .Net
- •15.3 Структуры
- •Задание
- •16.1. Классификация коллекций.
- •16.2 Коллекции общего назначения
- •16.3 Класс Stack
- •16.4 Класс Queue
- •16.5 Класс ArrayList
- •16.6 Класс Hashtable
- •17.1 Струткура простейшего windows-приложения
- •17.2 Элементы управления на форме
- •17.3 Обработка событий
- •17.4 Работа с элементами управления
- •17.5 Кнопки
- •17.6 Работа с элементами управления в режиме работы приложения
- •17.7 Работа со списками: ListBox, ComboBox, NumericUpDown.
- •17.8 Работа с переключателями: RadioButton, CheckBox
- •18.1 Рисование в форме
- •18.2 Работа с изображениями
11.1 Байтовый поток
Чтобы создать байтовый поток, связанный с файлом, создается объект класса FileStream. При этом в классе определено несколько конструкторов. Чаще всего используется конструктор, который открывает поток для чтения и/или записи:
FileStream(string filename, FileMode mode)
где:
-
параметр filename определяет имя файла, с которым будет связан поток ввода-вывода данных; при этом filename определяет либо полный путь к файлу, либо имя файла, который находится в папке bin/debug вашего проекта.
-
параметр mode определяет режим открытия файла, который может принимать одно из возможных значений, определенных перечислением FileMode:
-
FileMode.Append - предназначен для добавления данных в конец файла;
-
FileMode.Create - предназначен для создания нового файла, при этом если существует файл с таким же именем, то он будет предварительно удален;
-
FileMode.CreateNew - предназначен для создания нового файла, при этом файл с таким же именем не должен существовать;
-
FileMоde.Open - предназначен для открытия существующего файла;
-
FileMode.ОpenOrCreate - если файл существует, то открывает его, в противном случае создает новый
-
FileMode.Truncate - открывает существующий файл, но усекает его длину до нуля
Если попытка открыть файл оказалась неуспешной, то генерируется одно из исключений: FileNotFoundException - файл невозможно открыть по причине его отсутствия, IOException - файл невозможно открыть из-за ошибки ввода-вывода, ArgumentNullException - имя файла представляет собой null-значение, ArgumentException - некорректен параметр mode, SecurityException - пользователь не обладает правами доступа, DirectoryNotFoundException - некорректно задан каталог.
Другая версия конструктора позволяет ограничить доступ только чтением или только записью:
FileStream(string filename, FileMode mode, FileAccess how)
где:
-
параметры filename и mode имеют то же назначение, что и в предыдущей версии конструктора;
-
параметр how, определяет способ доступа к файлу и может принимать одно из значений, определенных перечислением FileAccess:
-
FileAccess.Read - только чтение;
-
FileAccess.Write - только запись;
-
FileAccess.ReadWrite - и чтение, и запись.
После установления связи байтового потока с физическим файлом внутренний указатель потока устанавливается на начальный байт файла.
Для чтения очередного байта из потока, связанного с физическим файлом, используется метод ReadByte(). После прочтения очередного байта внутренний указатель перемещается на следующий байт файла. Если достинут конец файла, то метод ReadByte() возвращает значение -1.
Для побайтовой записи данных в поток используется метод WriteByte().
По завершении работы с файлом его необходимо закрыть. Для этого достаточно вызвать метод Close (). При закрытии файла освобождаются системные ресурсы, ранее выделенные для этого файла, что дает возможность использовать их для работы с другими файлами.
Рассмотрим пример использования класса FileStream, для копирования одного файла в другой. Но вначале создадим текстовый файл text.txt в папке bin/debug текущего проекта. И внесем в него произвольную информацию, например:
12 456
Hello!
23,67 4: Message
using System;
using System.Text;
using System.IO; //для работы с потоками
namespace MyProgram
{
class Program
{
static void Main()
{
try
{
FileStream fileIn = new FileStream("text.txt",
FileMode.Open,
FileAccess.Read);
FileStream fileOut = new FileStream("newText.txt",
FileMode.Create,
FileAccess.Write);
int i;
while ((i = fileIn.ReadByte())!=-1)
{
//запись очередного файла в поток, связанный с файлом fIleOut
fileOut.WriteByte((byte)i);
}
fileIn.Close();
fileOut.Close();
}
catch (Exception EX)
{
Console.WriteLine(EX.Message);
}
}
}
}
Задание. Подумайте, почему для переменной i указан тип int. Можно было бы указать тип byte?