Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Перемещение файлового указателя
Метод Seek() изменяет положение файлового указателя — места, где находится следующий записываемый или считываемый фрагмент данных. Другими словами, методы Write() и Read()класса CFileработают с символами в позиции файлового указателя. Метод Seek() помещает файловый указатель в любое место файла. Обратите внимание на константуCFile:: beginв вызове методаSeek(): InFile.Seek(20 * loop_index. CFile::begin); Это означает, что файловый указатель должен переместиться в новую позицию, положение которой зодано относительно начала файла. Возможные точки отсчета задаются константами CFile::begin, CFile::current(для текущей позиции файла) и CFile::end. Теперь файловый указатель находится в нужном месте. Теперь можно считать 20 символов в подготовленный массив InString, воспользовавшись методом Read(). Данный метод возвращает количество фактически прочитанных символов, которое мы сохраняем в целой переменнойNumberCharacters: void CFilerDlg::OnButton1() { CFile OutFile("data.dat", CFile: :modeCreate | CFile: :modeWrite); for(int loop_index = 0; loop_index < 4; loop_index++){ OutFile.Write(OutString[loop_index], 20); } OutFile.Close(); CFile InFile("data.dat", CFile::modeRead); for(loop_index == 0; loop_index < 4; loop_index++){ InFile.Seek(20 * loop_index. CFile::begin); int NumberCharacters == InFile.Read(InString, 20); } } Мы последовательно прочитали все записи файла. Учтите, что в приведенном выше примере метод Seek() используется исключительно для того, чтобы продемонстрировать деление файла на отдельные записи; это может быть очень полезно, если файл data.dat содержит, скажем, миллион и более записей. Но в нашем маленьком примере можно было бы прочитать все 80 символов из файла data.dat за один вызов Read () — следует лишь запросить 80 символов вместо 20. ПОДСКАЗКА: Если точный размер файла неизвестен, запросите в методе Read() количество байт, заведомо превышающее объем файла — Read() возвратит количество фактически прочитанных байт, которое в данном случае совпадает с размером файла. Кроме того, можно читать файл по секциям, и если количество байт, прочитанных методом Read() окажется меньше запрошенного, вы достигли конца файла. Прочитанная запись находится всимвольном массиве InString[ ].Остается лишь перенести содержимое всех записей во второетекстовое поле и закрыть файл data.dat void CFilerDlg::OnButton1() { CFile OutFile("data.dat", CFile: :modeCreate | CFile: :modeWrite); for(int loop_index = 0; loop_index < 4; loop_index++){ OutFile.Write(OutString[loop_index], 20); } OutFile.Close(); CFile InFile("data.dat", CFile::modeRead); for(loop_index == 0; loop.index < 4; loop„index++){ InFile.Seek(20 * loop_index. CFile::begin); int NumberCharacters == InFile.Read(InString, 20); m_text2 += CString(InString); } UpdateData(false); InFile.Close(); } Программа готова к работе. Запустите ее. Текст, предназначенный для сохранения в четырех записях, содержится в верхнем текстовом поле. Нажмите кнопку Прочесть и записать файл. Текст записывается в файл data.dat, а затем повторно считывается программой и выводится в нижнем текстовом поле. Работа с несколькими документами и видами Сейчас мы обратимся к чрезвычайно сильному аспекту Visual С++ — одновременной работе с несколькими документами и с несколькими видами для документов. Это позволит открыть в программе сразу несколько документов (скажем. timetable.txt и phonenumbers.txt) и работать с ними так, как предусмотрено в приложении. До сих пор нам не приходилось организовывать работу с несколькими документами в одной программе. Все программы, написанные до настоящего момента, намеренно делались однодокументными — это позволяло упростить программу и сосредоточиться на других аспектах программирования на Visual C++, однако пришло время для работы с несколькими документами в одной программе. Как мы вскоре увидим, разные документы отображаются в разных окнах внутри главного окна. Это называется многодокументным интерфейсом (MDI). Программа на Visual C++ может автоматически создавать новые объекты для нестандартных классов документа и вида при каждом выполнении команды File >- New. Каждый документ обладает своим собственным объектом документа, что обеспечивает автоматическое отделение данных одного документа от других. Мы также увидим, как обеспечить в программе отображение нескольких видов для каждого документа. Вид определяет внешнее представление данных: когда документ слишком велик, чтобы полностью поместиться на экране, вид отображает лишь некоторую его часть. Для одного документа можно открыть сразу несколько видов — каждый будет показывать отдельную часть главного документа. Пользуясь несколькими видами, пользователь может перемещаться по документу и одновременно работать с различными его частями. Каждый вид отображается в отдельном окне. Раз пользователь получает возможность работать с различными видами одного документа, возникает новая проблема: что делать, если пользователь внес изменения в одном виде? Узнают ли о них остальные виды того же документа? Для программ, построенных с помощью AppWizard, ответ будет отрицательным — пользователь может просматривать один и тот же фрагмент документа в двух разных окнах и внести в одном из них изменения, которые не отобразятся в другом окне. Впрочем, мы узнаем, как справиться с этой проблемой. Кроме того, поскольку при составлении программ нам придется иметь дело с большими документами, мы узнаем, как обеспечить работу полос прокрутки, расположенных вдоль сторон окна вида. С их помощью пользователь может плавно прокручивать содержимое документа. Наконец, мы "накроем" целое окно вида текстовым полем, чтобы получить доступ к стандартным функциям редактирования Cut, Copy и Paste, а также встроенным полосам прокрутки. Начнем с первой программы, работающей с несколькими документами и видами. |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 328. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |