Еще один класс порожденный от CFile. Этот класс позволяет пользоваться стандартными стредствами C,C++ для ввода/вывода. При использовании этого класса важно понятие открытия и закрытия файла, как и при обычном открытии файла в C в отличии от расмотренного ранее CMemFile.
Давайте создадим приложение AppWizard на основе диалогового окна и поставим кнопку с кодом. Как делали в прошлые разы.
void CTestStdioDlg::OnButton1() { CStdioFile File("c:\\windows\\Wordpad.ini",CFile::modeRead); CString str; File.ReadString(str); AfxMessageBox(str); File.Close(); }Любой класс начинается с конструктора. Вот какие конструкторы у этого класса.
CStdioFile( ); CStdioFile( FILE* pOpenStream ); CStdioFile( LPCTSTR lpszFileName, UINT nOpenFlags ); throw( CFileException );При укзании имени файла производится его открытие. Открытие может быть в текстовом и бинарном формате. Текстовый режим реализует стандартную обработку возврата коретки при чтении данных. Конец строки работает интересно. Вот так.
Посылаем конец стоки 0хА в файл пишется 0хА 0хD Читаем из файла конец строки 0хА 0хD, читается из файла 0хAКак видно из конструктора при невозможности операции с файлом появится исключение. Сделайте вот так.
void CTestStdioDlg::OnButton1() { CStdioFile File("c:\\windows\\NotFile.not",CFile::modeRead); CString str; File.ReadString(str); AfxMessageBox(str); File.Close(); }И вы получите исключение такого вида.
красивое сообщение, но его неполохо бы обработать хоть просто, вот например так хотя и не совсем корректно, потому что будут отлавливаться все типы исключений.
void CTestStdioDlg::OnButton1() { try { CStdioFile File("c:\\windows\\NotFile.not",CFile::modeRead); CString str; File.ReadString(str); AfxMessageBox(str); File.Close(); } catch(...) { AfxMessageBox("Error Open"); } }
К классу CFile есть ряд дополнительных функций:
ReadString читает строку текста WriteString записывает строку текста
И указатель на открытый файл:
m_pStream