Файловая система – класс cStdioFile
Если вы привыкли пользоваться функциями потокового ввода/вывода из стандартной библиотеки трансляторов Си и Си++, обратите внимание на класс CStdioFile , наследованный от базового класса CFile. Этот класс позволяет выполнять буферизованный ввод/вывод в текстовом и двоичном режиме.
CStdioFile←CFile←CObject
В текстовом режиме выполняется специальная обработка символов возврата каретки и перевода строки. Когда в файл, открытый в текстовом режиме, записывается символ перевода строки \n (код 0x0A), он преобразуется в два символа – символ перевода строки (код 0x0A) и символ возврата каретки (код 0x0D). И наоборот, когда из файла считывается пара символов перевода строки и возврата каретки, они преобразуются в один символ перевода строки.
Для объектов класса CStdioFile можно вызывать все методы его базового класса CFile, кроме методов Duplicate, LockRange и UnlockRange. Напомним, что класс CMemFile, также наследованный от базового класса CFile, тоже работает с этими методами.
В класс CStdioFile входит элемент данных m_pStream, который содержит указатель на открытый файл. Если объект CStdioFile создан, но файл либо еще не открыт, либо закрыт, тогда m_pStream содержит константу NULL.
Класс CStdioFile имеет три различных конструктора. Первый конструктор класса CStdioFile не имеет параметров:
CStdioFile();
Этот конструктор только создает объект класса, но не открывает никаких файлов. Чтобы открыть файл, надо вызвать метод Open базового класса CFile.
Второй конструктор класса CStdioFile можно вызывать, если файл уже открыт и вам надо создать новый объект класса и связать с ним открытый файл:
CStdioFile(FILE* pOpenStream);
Этот конструктор можно использовать, если файл был открыт стандартной функцией fopen.
Параметр pOpenStream должен содержать указатель на файл, полученный вызовом стандартной функции fopen.
Третий, последний конструктор можно использовать, если надо создать объект класса CStdioFile, открыть новый файл и связать его с только что созданным объектом:
CStdioFile(LPCTSTR lpszFileName, UINT nOpenFlags) throw(CFileException);
Если указанный файл не может быть открыт, вызывается исключение CFileException.
Параметр lpszFileName должен содержать указатель на строку с именем файла. Можно указать полный путь файла, а не только его имя. Параметр nOpenFlags определяет режим, в котором будет открыт файл. Возможные значения этого параметра были описаны ранее (см. Метод Open класса CFile).
Для чтения и записи в текстовый файл класс CStdioFile включает два новых метода ReadString и WriteString. Метод ReadString позволяет прочитать из файла строку символов, а метод WriteString – записать.
Метод ReadString имеет две формы. Первая используется для чтения строк из файла в буфер памяти, а вторая для чтения строк и записи их в объект класса CString.
Вот описание первой формы метода ReadString:
virtual LPTSTR ReadString(LPTSTR lpsz, UINT nMax) throw(CFileException);
Из открытого файла считывается текстовая строка и записывается в буфер lpsz. Считается, что строка файла оканчивается символами перевода строки и возврата каретки. В конец строки, записанной в буфер lpsz, заносится символ двоичного нуля (\0).
Максимальное количество считываемых символов определяется параметром nMax. Если в строке файла больше, чем nMax – 1 байт, то остальные символы не будут прочитаны. Метод ReadString возвращает указатель на прочитанную строку или NULL, если достигнут конец файла.
Вторая форма метода ReadString не намного отличается от первой. Вместо двух параметров lpsz и nMax указывается один параметр rString, указывающий на объект класса CString, в который будет записана строка, прочитанная из файла:
BOOL ReadString(CString& rString) throw(CFileException);
Еще одно отличие второй формы метода ReadString заключается в типе возвращаемого им значения. Если достигнут конец файла, то вторая форма метода ReadString возвращает константу FALSE.
Для записи в файл текстовой строки предназначен метод WriteString:
virtual void WriteString(LPCTSTR lpsz) throw(CFileException);
В качестве параметра lpsz этого метода надо указать адрес буфера с текстовой строкой, закрытой символом \0. Символ \0 не записывается в файл. Если в текстовой строке lpsz есть символы перевода строки, они записываются как пара символов возврата каретки и перевода строки.
Метод WriteString может вызвать исключение, если во время записи в файл произойдет ошибка, например переполнение диска.
- Фролов а.В., Фролов г.В. Библиотека системного программиста
- Программирование для Windows 95 и Windows nt Введение
- Поддержка сети Internet
- Язык моделирования виртуальной реальности
- Игровое sdk
- Набор ocx объектов
- Как связаться с авторами
- Благодарности
- Ввод/вывод
- Константы
- Распределение памяти
- Операторы new и delete
- Перегрузка имен функций
- Задание параметров функции по умолчанию
- Встраивание
- Ключевое слово this
- Разграничение доступа к элементам класса
- Методы, входящие в класс
- Конструкторы и деструкторы класса
- Методы, не изменяющие объекты класса
- Статические методы
- Общие члены объектов класса
- Дружественные функции и дружественные классы
- Дружественные функции
- Дружественные классы
- Наследование
- Единичное наследование
- Множественное наследование
- Разграничение доступа к элементам базового класса
- Переопределение методов базового класса
- Виртуальные методы
- Абстрактные классы
- Структуры
- Шаблоны
- Шаблоны в mfc
- Перегрузка операторов
- Обработка исключительных ситуаций
- Операторы try, throw и catch
- Листинг 1.1. Файл Exception.Cpp
- Универсальный обработчик исключений
- Тип исключения
- 2. Введение в mfc
- Классы библиотеки mfc
- Самый базовый класс mfc (класс cObject)
- Основа структуры приложения (класс cCmdTarget)
- Подзадачи приложения (классы cWinThread и cWinApp)
- Документ приложения (класс cDocument)
- Шаблон документов (классы cDocTemplate, cSingleDocTemplate и cMultiDocTemplate)
- Окна (класс cWnd)
- Исключения (класс cException)
- Массивы, списки и словари
- Файловая система (класс cFile)
- Контекст отображения (класс cdc)
- Объекты графического интерфейса (класс cGdiObject)
- Меню (класс cMenu)
- Базы данных (классы для работы с базами данных)
- Синхронизация задач приложения (класс cSyncObject)
- Сокеты (классы cAsyncSocket и cSocket)
- Классы, не имеющие базового класса
- Простые классы
- Архивный класс (класс cArchive)
- Информация о классе объекта (структура cRuntimeClass)
- Отладка приложения (классы cDumpContext, cMemoryState)
- Печать документа (класс cPrintInfo)
- Первое приложение mfc
- Окно Project Workspace
- Листинг 2.1. Файл mfHello.Cpp
- Средства ClassView
- Добавление к классу нового метода
- Добавление к классу нового элемента данных
- Просмотр дерева наследования классов
- Редактирование методов класса
- Редактирование элементов данных класса
- Приложение с единственным окном
- Листинг 2.2. Файл mfStart.Cpp
- Листинг 2.3. Файл mfStartApp.H
- Оконные сообщения
- Сообщения от органов управления
- Командные сообщения
- Макрокоманда on_registered_message
- Макрокоманда on_message
- Макрокоманда on_command
- Макрокоманда on_command_range
- Макрокоманда on_update_command_ui
- Макрокоманда on_update_command_ui_range
- Макрокоманда on_control_range
- Забегая вперед
- Приложение mfMenu
- Листинг 2.7. Файл mfMenu.Cpp
- Ресурсы приложения
- Создание меню для приложения mfMenu
- Листинг 2.8. Файл mfMenuRes.H
- Листинг 2.9. Файл mfMenuRes.Rc
- Долгий путь сообщения
- Листинг 2.10. Файл mfMessage.Cpp
- Листинг 2.11. Фрагмент файла mfMessage.Rc
- Листинг 2.12. Файл resource.H
- Диалоговая панель
- Приложение с модальной диалоговой панелью
- Листинг 2.13. Файл mfDialog.Cpp
- Vertical Scroll Bar Вертикальная полоса просмотра
- Листинг 2.14. Фрагмент файла mfDlgRes.Rc
- Листинг 2.15. Файл resource.H
- Главный класс приложения
- Класс диалоговой панели
- Обмен данными
- Приложение с немодальной диалоговой панелью
- 3. Некоторые классы mfc
- Класс cObject – основной класс mfc
- Конструкторы класса
- Оператор присваивания
- Диагностика
- Проверка целостности объектов класса
- Получение дампа объекта класса
- Сохранение и восстановление состояния объекта
- Метод IsSerializable
- Виртуальный метод Serialize
- Информация о классе
- Виртуальный метод GetRuntimeClass
- Метод IsKindOf
- Класс cPoint – точка на плоскости
- Класс cSize – относительные координаты
- Класс cString – текстовые строки
- Конструктор класса
- Коллекции
- Массивы – шаблон cArray
- Списки – шаблон cList
- Словари – шаблон cMap
- Класс cTime – дата и время
- Файловая система – класс cFile
- Открытие и создание файлов
- Идентификатор открытого файла
- Закрытие файлов
- Чтение и запись файлов
- Метод Flush
- Операции с файлами
- Блокировка
- Позиционирование
- Характеристики открытого файла
- Файловая система – классы cMemFile и cStdioFile
- Модификация класса cMemFile
- Файловая система – класс cStdioFile
- Приложение TestFile
- Листинг 3.1. Файл TestFile.Cpp
- Листинг 3.2. Файл fsystem.Dat
- Исключения – класс cException
- Класс cException
- Класс cMemoryException
- Класс cFileException
- Приложение Except
- Листинг 3.3. Файл Except.Cpp
- Класс cArchiveException
- Класс cNotSupportedException
- Класс cResourceException
- Класс cUserException
- Запись и восстановление объектов
- Запись в архивный файл
- Чтение из архивного файла
- Многозадачные приложения
- 4. Приложение с главной диалоговой панелью
- Создание приложения средствами mfc AppWizard
- Приложение Dialog
- Имена, используемые mfc
- Ресурсы приложения
- Icons Пиктограммы
- Version information Сведения о версии приложения
- Диалоговые панели приложения Dialog
- Пиктограмма
- Исходные тексты приложения
- Главный класс приложения dialog
- Листинг 4.1. Файл Dialog.H
- Листинг 4.2. Файл Dialog.Cpp
- Главный объект приложения
- Метод InitInstance
- Класс главной диалоговой панели приложения
- Листинг 4.3. Файл DialogDlg.H
- Листинг 4.4. Файл DialogDlg.Cpp
- Конструктор класса cDialogDlg
- Метод DoDataExchange
- Метод OnInitDialog
- Метод OnSysCommand (системное меню)
- Метод OnPaint (отображение пиктограммы приложения)
- Метод OnQueryDragIcon
- Файлы StdAfx.Cpp и StdAfx.H
- Листинг 4.5. Файл StdAfx.Cpp
- Листинг 4.6. Файл StdAfx.H
- Средства ClassWizard
- Создание нового класса
- Листинг 4.7. Файл NewClass.H
- Листинг 4.8. Файл NewClass.Cpp
- Включение в класс новых методов
- Включение в класс новых элементов данных
- Просмотр характеристик класса
- 5. Однооконный интерфейс
- Модель “документ – окно просмотра ”
- Процедура создания однооконного приложения
- Приложение Single
- Ресурсы приложения
- Шаблон меню
- Панель управления toolbar
- Пиктограмма
- Диалоговая панель
- Общие замечания о ресурсах приложения
- Классы приложения
- Класс cSingleApp
- Главный объект приложения
- Конструктор класса cSingleApp
- Метод InitInstance
- Метод OnAppAbout
- Класс cSingleDoc
- Конструктор и деструктор класса cSingleDoc
- Методы OnNewDocument и Serialize
- Методы AssertValid и Dump
- Класс cSingleView
- Конструктор и деструктор класса cSingleView
- Метод GetDocument
- Метод PreCreateWindow
- Метод OnDraw
- Методы OnPreparePrinting, OnBeginPrinting и OnEndPrinting
- Методы AssertValid и Dump
- Класс cMainFrame
- Конструктор и деструктор класса cMainFrame
- Метод OnCreate
- Панель управления и панель состояния
- Панель управления
- Панель состояния
- Метод PreCreateWindow
- Методы AssertValid и Dump
- Обработка командных сообщений
- Порядок обработки сообщений
- Главное окно однооконного приложения
- Окно просмотра
- Документ
- Диалоговая панель
- Командные сообщения и приложение Single
- Изменение порядка обработки сообщений
- Стандартные команд ные сообщения
- Командные сообщения с идентификаторами id_file_
- Командные сообщения с идентификаторами id_edit_
- Командные сообщения с идентификаторами id_window_
- Командные сообщения с идентификаторами id_app_
- Командные сообщения с идентификаторами id_help_
- Командные сообщения с идентификаторами id_view_
- Простейший графический редактор
- Создание нового документа
- Сохранение и восстановление документа на диске
- Для забывчивых пользователей
- Простейший текстовый редактор
- Заключение
- Литература