Разделы презентаций


Работа с файлами в C#

Содержание

Классы File и FileInfoПример 1: Получение информации о файле, копирование и удаление файла

Слайды и текст этой презентации

Слайд 1Программирование

Тема 6.3 Работа с файлами в C#

ПрограммированиеТема 6.3 Работа с файлами в C#

Слайд 2 Классы File и FileInfo
Пример 1: Получение информации о

файле, копирование и удаление файла






Классы File и FileInfoПример 1: Получение информации о файле, копирование и удаление файла

Слайд 3 Классы File и FileInfo
С помощью классов File и

FileInfo можно создавать, удалять, перемещать файлы, получать их свойства и

многое другое.
Некоторые полезные методы и свойства класса FileInfo:
CopyTo(newpath): копирует файл в новое место по указанному пути newpath
Create(): создает файл
Delete(): удаляет файл
MoveTo(newpath): перемещает файл в новое место
Свойство Exists: указывает, существует ли файл
Свойство Length: получает размер файла
Свойство Extension: получает расширение файла
Свойство Name: получает имя файла
Свойство FullName: получает полное имя файла
Класс File реализует похожую функциональность с помощью статических методов:
Copy(path, newpath): копирует файл в новое место
Create(path): создает файл
Delete(path): удаляет файл
Move(path, newpath): перемещает файл в новое место
Exists(path): определяет, существует ли файл по указанному пути path
Метод CopyTo класса FileInfo принимает два параметра: путь, по которому файл будет копироваться, и булевое значение, которое указывает, надо ли при копировании перезаписывать файл (если true, файл при копировании перезаписывается). Если же в качестве последнего параметра передать значение false, то если такой файл уже существует, приложение выдаст ошибку.
Метод Copy класса File принимает три параметра: путь к исходному файлу, путь, по которому файл будет копироваться, и булевое значение, указывающее, будет ли файл перезаписываться.
Классы File и FileInfoС помощью классов File и FileInfo можно создавать, удалять, перемещать файлы, получать

Слайд 4 Класс FileStream
Пример 2:





Класс FileStreamПример 2:

Слайд 5 Класс FileStream
Пример 2:





Класс FileStreamПример 2:

Слайд 6 Класс FileStream
Класс FileStream представляет возможности по считыванию

из файла и записи в файл. Рассмотрим наиболее важные его

свойства и методы:
Свойство Length: возвращает длину потока в байтах
Свойство Position: возвращает текущую позицию в потоке
Метод Read: считывает данные из файла в массив байтов. Принимает три параметра: int Read(byte[] array, int offset, int count) и возвращает количество успешно считанных байтов array - массив байтов, куда будут помещены считываемые из файла данные
 offset  - смещение в байтах в массиве array, в который считанные байты будут помещены
count - максимальное число байтов, предназначенных для чтения. Если в файле находится меньшее количество байтов, то все они будут считаны.
Метод long Seek(long offset, SeekOrigin origin): устанавливает позицию в потоке со смещением на количество байт, указанных в параметре offset.
Метод Write: записывает в файл данные из массива байтов. Принимает три параметра: Write(byte[] array, int offset, int count)
array - массив байтов, откуда данные будут записываться в файла
 offset  - смещение в байтах в массиве array, откуда начинается запись байтов в поток
 count - максимальное число байтов, предназначенных для записи
FileStream представляет доступ к файлам на уровне байтов, поэтому, например, если надо считать или записать одну или несколько строк в текстовый файл, то массив байтов надо преобразовать в строки, используя специальные методы. Поэтому для работы с текстовыми файлами применяются другие классы.
В то же время при работе с различными бинарными файлами, имеющими определенную структуру FileStream может быть очень даже полезен для извлечения определенных порций информации и ее обработки.
В примере 2 выполняется считывание-запись в текстовый файл.

Класс FileStreamКласс FileStream представляет возможности по считыванию из файла и записи в файл. Рассмотрим

Слайд 7 Класс FileStream
Разберем пример 2. Объект fstream1 создается

через конструктор, а объект fstream2 - через один из статических

методов класса File. Здесь в конструктор передается два параметра: путь к файлу и перечисление FileMode. Данное перечисление указывает на режим доступа к файлу и может принимать следующие значения:
Append: если файл существует, то текст добавляется в конец файл. Если файла нет, то он создается. Файл открывается только для записи.
Create: создается новый файл. Если такой файл уже существует, то он перезаписывается
CreateNew: создается новый файл. Если такой файл уже существует, то он приложение выбрасывает ошибку
Open: открывает файл. Если файл не существует, выбрасывается исключение
Create: создается новый файл. Если такой файл уже существует, то он перезаписывается
OpenOrCreate: если файл существует, он открывается, если нет - создается новый
Truncate: если файл существует, то он перезаписывается. Файл открывается только для записи.
Статический метод OpenRead класса File открывает файл для чтения и возвращает объект FileStream.
Конструктор класса FileStream также имеет ряд перегруженных версий, позволяющий более точно настроить создаваемый объект. Все эти версии можно посмотреть на msdn.
И при записи, и при чтении применяется объект кодировки Encoding.Default из пространства имен System.Text. В данном случае мы используем два его метода: GetBytes для получения массива байтов из строки и GetString для получения строки из массива байтов.
В итоге введенная строка записывается в файл. По сути это бинарный файл (не текстовый), хотя если в него записать только строку, то можно посмотреть в удобочитаемом виде этот файл, открыв его в текстовом редакторе. Однако если в него записать случайные байты, например: fstream1.WriteByte(13); fstream1.WriteByte(103);, то могут возникнуть проблемы с его пониманием. Поэтому для работы непосредственно с текстовыми файлами предназначены отдельные классы - StreamReader и StreamWriter.
Класс FileStreamРазберем пример 2. Объект fstream1 создается через конструктор, а объект fstream2 - через

Слайд 8 Классы StreamReader и StreamWriter
Пример 3: Чтение из файла

и StreamReader






Классы StreamReader и StreamWriterПример 3: Чтение из файла и StreamReader

Слайд 9 Классы StreamReader и StreamWriter
Пример 3: Чтение из файла

и StreamReader






Классы StreamReader и StreamWriterПример 3: Чтение из файла и StreamReader

Слайд 10 Классы StreamReader и StreamWriter
Класс FileStream не очень

удобно применять для работы с текстовыми файлами. К тому же

для этого в пространстве System.IO определены специальные классы: StreamReader и StreamWriter.
Класс StreamReader позволяет легко считывать весь текст или отдельные строки из текстового файла. Среди его методов можно выделить следующие:
Close: закрывает считываемый файл и освобождает все ресурсы
Peek: возвращает следующий доступный символ, если символов больше нет, то возвращает -1
Read: считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию: Read(char[] array, int index, int count), где array - массив, куда считываются символы, index - индекс в массиве array, начиная с которого записываются считываемые символы, и count - максимальное количество считываемых символов
ReadLine: считывает одну строку в файле
ReadToEnd: считывает весь текст из файла
В примере 3 используется оператор using. Не надо путать данный оператор с директивой using, которая подключает пространства имен в начале файла кода. Оператор using позволяет создавать объект в блоке кода, по завершению которого вызывается метод Dispose у этого объекта, и, таким образом, объект уничтожается. В данном случае в качестве такого объекта служит переменная sr.
В примере 3 текст из файла считывается различными способами.
В первом случае считывается весь текст с помощью метода ReadToEnd().
Во втором случае считывается построчно через цикл while: while ((line = sr.ReadLine()) != null) - сначала присваиваем переменной line результат функции sr.ReadLine(), а затем проверяем, не равна ли она null. Когда объект sr дойдет до конца файла и больше строк не останется, то метод sr.ReadLine() будет возвращать null.
В третьем случае считывается в массив четыре символа.
Замечание. В последних двух случаях в конструкторе StreamReader указывалась кодировка System.Text.Encoding.Default. Свойство Default класса Encoding получает кодировку для текущей кодовой страницы ANSI. Также через другие свойства мы можем указать другие кодировки. Если кодировка не указана, то при чтении используется UTF8. Иногда важно указывать кодировку, так как она может отличаться от UTF8, и тогда мы получим некорректный вывод. 
Классы StreamReader и StreamWriterКласс FileStream не очень удобно применять для работы с текстовыми файлами.

Слайд 11 Классы StreamReader и StreamWriter
Пример 4: Запись в файл

и StreamWriter






Классы StreamReader и StreamWriterПример 4: Запись в файл и StreamWriter

Слайд 12 Классы StreamReader и StreamWriter
Пример 4: Запись в файл

и StreamWriter





Классы StreamReader и StreamWriterПример 4: Запись в файл и StreamWriter

Слайд 13 Классы StreamReader и StreamWriter
Для записи в текстовый

файл используется класс StreamWriter. Свою функциональность он реализует через следующие методы:
Close:

закрывает записываемый файл и освобождает все ресурсы
Flush: записывает в файл оставшиеся в буфере данные и очищает буфер.
Write: записывает в файл данные простейших типов, как int, double, char, string и т.д.
WriteLine: также записывает данные, только после записи добавляет в файл символ окончания строки
В примере 4 выполняется запись в файл. Сначала файл считывается в переменную text, а затем выполняется запись этой переменной через объект StreamWriter в новый файл.
Класс StreamWriter имеет несколько конструкторов. В программе примера используется один из них: new StreamWriter(writePath, false, System.Text.Encoding.Default). В качестве первого параметра передается путь к записываемому файлу. Второй параметр представляет булевую переменную, которая определяет, будет файл дозаписываться или перезаписываться. Если этот параметр равен true, то новые данные добавляются в конце к уже имеющимся данным. Если false, то файл перезаписывается. В примере 4 в первом случае файл перезаписывается, а во втором делается дозапись в конец файла.
Третий параметр указывает кодировку, в которой записывается файл.


Классы StreamReader и StreamWriterДля записи в текстовый файл используется класс StreamWriter. Свою функциональность он реализует

Слайд 14 Классы BinaryWriter и BinaryReader
Пример 5: Запись и чтение

бинарного файла





Классы BinaryWriter и BinaryReaderПример 5: Запись и чтение бинарного файла

Слайд 15 Классы BinaryWriter и BinaryReader
Пример 5: Запись и чтение

бинарного файла





Классы BinaryWriter и BinaryReaderПример 5: Запись и чтение бинарного файла

Слайд 16 Классы BinaryWriter и BinaryReader
Пример 5: Запись и чтение

бинарного файла





Классы BinaryWriter и BinaryReaderПример 5: Запись и чтение бинарного файла

Слайд 17 Классы BinaryWriter и BinaryReader
Для работы с бинарными

файлами предназначена пара классов BinaryWriter и BinaryReader. Эти классы позволяют читать и записывать

данные в двоичном формате.
Основные метода класса BinaryWriter:
Close(): закрывает поток и освобождает ресурсы
Flush(): очищает буфер, дописывая из него оставшиеся данные в файл
Seek(): устанавливает позицию в потоке
Write(): записывает данные в поток
Основные метода класса BinaryReader:
Close(): закрывает поток и освобождает ресурсы
ReadBoolean(): считывает значение bool и перемещает указать на один байт
ReadByte(): считывает один байт и перемещает указать на один байт
ReadChar(): считывает значение char, то есть один символ, и перемещает указать на столько байтов, сколько занимает символ в текущей кодировке
ReadDecimal(): считывает значение decimal и перемещает указать на 16 байт
ReadDouble(): считывает значение double и перемещает указать на 8 байт
ReadInt16(): считывает значение short и перемещает указать на 2 байта
ReadInt32(): считывает значение int и перемещает указать на 4 байта
ReadInt64(): считывает значение long и перемещает указать на 8 байт
ReadSingle(): считывает значение float и перемещает указать на 4 байта
ReadString(): считывает значение string. Каждая строка предваряется значением длины строки, которое представляет 7-битное целое число.
С чтением бинарных данных все просто: соответствующий метод считывает данные определенного типа и перемещает указатель на размер этого типа в байтах, например, значение типа int занимает 4 байта, поэтому BinaryReader считает 4 байта и переместит указать на эти 4 байта.. 

Классы BinaryWriter и BinaryReaderДля работы с бинарными файлами предназначена пара классов BinaryWriter и BinaryReader. Эти классы позволяют

Слайд 18 Классы BinaryWriter и BinaryReader
В примере 5 с

помощью классов BinaryWriter и BinaryReader записывается и считывается из файла

массив экземпляров структуры State. В основной программе создаем массив экземпляров структуры и записываем с помощью BinaryWriter. Этот класс в качестве параметра в конструкторе принимает объект Stream, который создается вызовом File.Open(path, FileMode.OpenOrCreate).
Затем в цикле пробегаемся по массиву структур и записываем каждое поле структуры в поток. В том порядке, в каком значения полей записываются, в том порядке они и будут размещаться в файле.
Затем считываем из записанного файла. Конструктор класса BinaryReader также в качестве параметра принимает объект потока, только в данном случае устанавливаем в качестве режима FileMode.Open: new BinaryReader(File.Open(path, FileMode.Open))
В цикле while считываем данные. Чтобы узнать окончание потока, вызываем метод PeekChar(). Этот метод считывает следующий символ и возвращает его числовое представление. Если символ отсутствует, то метод возвращает -1, что будет означать, что мы достигли конца файла.
В цикле последовательно считываем значения полей структур в том же порядке, в каком они записывались.

Классы BinaryWriter и BinaryReaderВ примере 5 с помощью классов BinaryWriter и BinaryReader записывается и

Слайд 19 Класс BinaryFormatter 
Пример 6:





Класс BinaryFormatter Пример 6:

Слайд 20 Класс BinaryFormatter 
Пример 6:





Класс BinaryFormatter Пример 6:

Слайд 21 Класс BinaryFormatter
Выше рассмотрено, как сохранять информацию в

текстовые файлы, а также как сохранять несложные структуры в бинарные

файлы. Но нередко подобных механизмов оказывается недостаточно особенно для сохранения сложных объектов. С этой проблемой справляется механизм сериализации. Сериализация представляет процесс преобразования какого-либо объекта в поток байтов. После преобразования мы можем этот поток байтов или записать на диск или сохранить его временно в памяти. А при необходимости можно выполнить обратный процесс - десериализацию, то есть получить из потока байтов ранее сохраненный объект.
Чтобы объект определенного класса можно было сериализовать, надо этот класс пометить атрибутом Serializable:
При отстутствии данного атрибута объект не сможет быть сериализован, и при попытке сериализации будет выброшено исключение SerializationException.
Хотя сериализация представляет собой преобразование объекта в некоторый набор байтов, но в действительности только бинарным форматом она не ограничивается. В .NET можно использовать и другие форматы сериализации. Мы рассмотрим сериализацию в бинарный формат, которую описывает класс BinaryFormatter. Класс BinaryFormatter определен в пространстве имен System.Runtime.Serialization.Formatters.Binary.
Для сериализации будет использоваться метод Serialize, который в качестве параметров принимает поток, куда помещает сериализованные данные (например, бинарный файл), и объект, который надо сериализовать. А для десериализации будет применяться метод Deserialize, который в качестве параметра принимает поток с сериализованными данными.
Класс BinaryFormatterВыше рассмотрено, как сохранять информацию в текстовые файлы, а также как сохранять несложные

Слайд 22 Класс BinaryFormatter
В примере 6 класс Person объявлен

с атрибутом Serilizable. Благодаря этому его объекты будут доступны для

сериализации. Далее создается объект BinaryFormatter: BinaryFormatter formatter = new BinaryFormatter(); Затем последовательно выполняется сериализация и десериализация. Для обоих операций нужен поток, в который либо сохранять, либо из которого считывать данные. Данный поток представляет объект FileStream, который записывает объект Person в файл persons.dat.
Сериализация выплняется методом formatter.Serialize(fs, person), который добавляет все данные об объекте Person в файл persons.dat.
При десериализации нужно еще преобразовать объект, возвращаемый методом Deserialize, к типу Person:(Person)formatter.Deserialize(fs).
Сериализация значительно упрощает процесс сохранения объектов в бинарную форму по сравнению, например, с использованием связки классов BinaryWriter/BinaryReader.
В примере 7 сериализуется массив объектов класса Person.
Класс BinaryFormatterВ примере 6 класс Person объявлен с атрибутом Serilizable. Благодаря этому его объекты

Слайд 23 Класс BinaryFormatter 
Пример 7:





Класс BinaryFormatter Пример 7:

Слайд 24 Класс BinaryFormatter 
Пример 7:





Класс BinaryFormatter Пример 7:

Слайд 25
Контрольные вопросы

Классы File и FileInfo: назначение, основные методы. Пример использования

.
Класс FileStream: назначение, основные методы. Пример использования.
Классы  StreamReader и StreamWriter:

назначение, примеры использования.
Классы BinaryWriter и BinaryReader: назначение, примеры использования.
Класс BinaryFormatter : назначение, основные методы, примеры использования.





Контрольные вопросыКлассы File и FileInfo: назначение, основные методы. Пример использования .Класс FileStream: назначение, основные методы. Пример использования.Классы 

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика