Библиотека Интернет Индустрии I2R.ru |
|||
|
Файлы в MFC (работа с классом CFile)В данной статье рассказывается как открывать и закрывать файлы, а так же как считывать и записывать в них данные. Класс CFile обеспечивает основные бинарные оперции с файлами. Классы CStdioFile, CMemFile наследованы от CFile и используются для более специфической работы с файлами. Открытие файлов
В MFC процесс открытия файла состоит из двух этапов. Для открытия файла
Следующий пример показывает, как создать новый файл с правами на чтение/запись (существующий файл с таким же путём будет заменён): char* pszFileName = "c:\\test\\myfile.dat"; CFile myFile; CFileException fileException; if ( !myFile.Open( pszFileName, CFile::modeCreate | CFile::modeReadWrite, &fileException ) ) { TRACE( "Can't open file %s, error = %u\n", pszFileName, fileException.m_cause ); }
Чтение и запись файлов
Теперь давайте посмотрим, как напрямую считывать и записывать в объект CFile (для буфферизованного ввода/вывода используется класс CArchive ). Чтобы прочитать и записать данные в файл
Read имеет два параметра (первый, это указатель на буфер, а второй, это количество байт, которые необходимо считать) и возвращает количество байт, которые были реально считаны. Например, если был достигнут конец файла (end-of-file (EOF)), то функция вернёт количество байт, оставшихся до конца файла. Если при чтении из файла произойдёт ошибка, то возникнет исключительная ситуация. Write очень похожа на Read, за исключением того, что не возвращает количество записанных байт. Так же при возникновении ошибки произойдёт исключение. Следующий пример показывает, как читать и записывать в объект CFile: char szBuffer[256]; UINT nActual = 0; CFile myFile; myFile.Write( szBuffer, sizeof( szBuffer ) ); myFile.Seek( 0, CFile::begin ); nActual = myFile.Read( szBuffer, sizeof( szBuffer ) );
Закрытие файлов
Когда работа с файлом завершена, необходимо закрыть его. Чтобы закрыть файл
Если Вы создали объект CFile в классе или функции, то объект будет автоматически закрыт и уничтожен как только выполнение кода выйдет за пределы видимости объекта. Обратите внимание на то, что удаление объекта CFile не приведёт к физическому удалению файла с диска.
Получение информации о файле
CFile так же позволяет получить довольно обширную информацию о файлах, включая существование файла, дату и время создания и изменения, размер и путь. Чтобы узнать, существует ли файл
Таким образом, можно использовать результат функции GetStatus, чтобы определить, нужно ли использовать флаг CFile::modeCreate при открытии файла. Следующий пример демонстрирует это: CFile theFile; char* szFileName = "c:\\test\\myfile.dat"; BOOL bOpenOK; CFileStatus status; if( CFile::GetStatus( szFileName, status ) ) { // Открываем файл не создавая его bOpenOK = theFile.Open( szFileName, CFile::modeWrite ); } else { // Создаём файл и открываем его bOpenOK = theFile.Open( szFileName, CFile::modeCreate | CFile::modeWrite ); } |
|
2000-2008 г. Все авторские права соблюдены. |
|