Главная страница
Навигация по странице:

  • Toolbox

  • ReadWriteBin

  • Самостоятельная работа. Самостоятельная работа2. Самостоятельная работа 3 Чтениезапись бинарных файлов с использованием потока данных


    Скачать 164.86 Kb.
    НазваниеСамостоятельная работа 3 Чтениезапись бинарных файлов с использованием потока данных
    АнкорСамостоятельная работа
    Дата20.10.2022
    Размер164.86 Kb.
    Формат файлаdocx
    Имя файлаСамостоятельная работа2.docx
    ТипСамостоятельная работа
    #744254

    Самостоятельная работа №3 Чтение/запись бинарных файлов с использованием потока данных
    Обычно программа либо что-то читает с диска в оперативную память, либо что-то пишет на диск. Писать/читать можно либо в бинарный (двоичный) файл, либо в текстовый (литерный, строковый) файл. Разница между ними состоит в том, что текстовый файл можно прочитать текстовым редактором, например, Блокнотом, а бинарный — нет. Название "бинарный" (двоичный) — условное, поскольку, по сути, и текстовый, и бинарный файлы являются двоичными файлами.

    Операции с двоичным файлом гораздо более скоростные, и такой файл занимает существенно меньшее пространство на диске. Зато текстовый файл можно читать и редактировать любым текстовым редактором. Обычно программист выбирает компромисс между этими двумя преимуществами. Приведем пример самого простейшего случая записи на диск бинарного файла с данными об успеваемости одного студента. Понятно, что эта программа может быть маленькой частью большой программы по обработке успеваемости студентов в вузе. Данная программа принимает от пользователя сведения только об одном студенте в текстовые поля формы. При нажатии кнопки Сохранить программа записывает введенные сведения в двоичный файл, а при нажатии кнопки Читать читает эти сведения из двоичного файла в текстовые поля формы. Итак, в форме мы должны иметь три текстовых поля, куда пользователь может записать соответственно номер студента по порядку, фамилию студента и его средний балл успеваемости. Поэтому в форму из панели Toolbox перенесем три текстовых поля TextBox, три метки Label и две командные кнопки: Читать и Сохранить. Таким образом, получим пользовательский интерфейс, показанный на рис. 4.10. Назовем программу ReadWriteBin. Текст ее приведен в листинге.









    Как можно видеть, в процедуре обработки события загрузки формы организована инициализация (присвоение начальных значений) элементов формы: текстовых полей, меток и кнопок. Запись файла на диск происходит при обработке события button2.Click, т. е. щелчка мышью на кнопке Сохранить (рис.). С этой целью создаем поток байтов Писатель для открытия файла student.usp. Если такого файла не существует, то он создается (Create), а если файл уже есть, то он перезаписывается. Как видно из текста программы, для ее упрощения мы не использовали элемент управления OpenFileDialog открытия файла в диалоге. Далее преобразуем записанное в текстовых полях в более естественные типы данных. Номер по порядку Номер_пп — это тип целых чисел, преобразование в целый тип может быть реализовано операцией Convert.ToInt32 (можно использовать другие функции преобразования), для переменной СредБалл (средний балл) больше всего подходит тип с плавающей точкой Single, при этом преобразование осуществляется операцией Convert.ToSingle. Преобразование для строковой переменной ФИО является необязательным и приведено для симметрии записей. Операторы Писатель.Write записывают эти данные в файл. После блока finally происходит обязательное закрытие (Close) файла. Чтение файла выполняется при обработке события "щелчок мышью на кнопке Читать". Как уже упоминалось, для максимального упрощения в данной программе не предусмотрено открытие файла через стандартное диалоговое окно, поэтому в начале процедуры выясняем, существует ли такой файл. Если файла D:\student.usp нет, то программируем выход (return) из обработчика данного события. Заметьте, чтобы программисту было максимально легко отслеживать ветви оператора if, мы написали: "Если файла нет, то return". При этом длинная ветвь логики "если файл есть" не включена непосредственно в оператор if. Поэтому такой фрагмент программного кода читается (воспринимается) программистом легко — это типичный пример хорошо написанного программного кода. Далее создается поток байтов Читатель из файла student.usp, открытого для чтения. Чтение из потока в каждую переменную реализовано с помощью функции ReadInt32 — читать из потока Читатель в переменную целого типа, аналогично функциям ReadString и ReadSingle. Затем осуществлено конвертирование этих переменных в строковый тип Convert.ToString. Как видно из программы, можно было изначально все текстовые поля записывать в файл без конвертирования, но при дальнейшем развитии этой программы значения полей все равно пришлось бы преобразовывать в соответствующий тип. После блока finally происходит закрытие (Close) файла. Блок finally выполнится всегда, даже если перед ним была команда return. Дальнейшее развитие этой программы может быть осуществлено путем добавления в файл сведений о других студентах. В таком случае при чтении файла количество студентов будет неизвестно. Тогда следует обработать ситуацию достижения конца файла:

    catch (EndOfStreamException e) а затем закрыть файл.


    написать администратору сайта