Visual C++. Описание стандартных классов - CFile

ОГЛАВЛЕНИЕ


CFile

CFile();
CFile(int hFile);
CFile(LPCTSTR lpszFileName, UINT nOpenFlags);
throw(CFileException);

Аргументы

  • hFile - дескриптор уже открытого файла.
  • lpszFileName - строка, содержащая путь к открываемому файлу. Путь может быть как относительным, так и абсолютным.
  • nOpenFlags - флаги доступа к файлу. Определяют действия, которые необходимо предпринять при открытии файла. Приведенные ниже флаги могут объединяться оператором побитового ИЛИ (|). Необходимо указать как минимум один флаг доступа и один флаг разделения ресурсов. Флаги modeCreate и modeNoInherit являются не обязательными. В данном аргументе могут быть указаны следующие флаги:
    CFile::modeCreate - создается новый файл. Если файл с данным именем уже существовал, то у него устанавливается нулевая длина;
    CFile::modeNoTruncate - если файл с данным именем уже существовал, то у него сохраняется прежняя длина. Этот флаг устанавливается совместно с флагом modeCreate. Это позволяет открывать и использовать один и тот же конструктор для создания новых файлов и открытия уже существующих. Этот флаг используется при создании объектов класса CstdioFile;
    CFile::modeRead - открывает файл только для чтения;
    CFile::modeReadWrite - открывает файл как для чтения, так и для записи;
    CFile::modeWrite - открывает файл только для записи;
    CFile::modeNoInherit - запрещает дочернему процессу использовать данный файл;
    CFile::shareDenyNone - позволяет другому процессу читать и записывать информацию в данный файл. При открытии данного файла возникает ошибка, если он был открыт в режиме совместимости каким-либо другим процессом;
    CFile::shareDenyRead - не позволяет другому процессу читать информацию из данного файла. При открытии данного файла возникает ошибка, если он был открыт в режиме совместимости или для чтения каким-либо другим процессом;
    CFile::shareDenyWrite - не позволяет другому процессу записывать информацию в данный файл. При открытии данного файла возникает ошибка, если он был открыт в режиме совместимости или для записи каким-либо другим процессом;
    CFile::shareExclusive - открывает данный файл в режиме безраздельного пользования, запрещая любому другому процессу читать или записывать информацию в данный файл. При открытии данного файла возникает ошибка, если он был открыт в режиме чтения или записи каким-либо другим процессом, или, даже, тем же самым процессом;
    CFile::shareCompat - этот флаг отсутствует в 32-разрядной библиотеке MFC. Он соответствует флагу CFile::shareExclusive в функции CFile::Open;
    CFile::typeText - устанавливает текстовый режим обработки файла, в котором предусмотрены специальные процедуры обработки пар символов возврат каретки/перевод строки (используется только в производных классах);
    CFile::typeBinary - устанавливает двоичный режим обработки файла (используется только в производных классах).

Описание

Используемый по умолчанию конструктор данного класса (не имеющий аргументов) не открывает файл, а присваивает величине m_hFile значение CFile::hFileNull. Поскольку данный класс не вызывает исключения, нет никакого смысла помещать его в структуры TRY/CATCH. Вместо этого следует использовать функцию Open, непосредственно проверяющую условия возникновения исключений. Вторая версия конструктора данного класса создает объект класса CFile, соответствующий существующему файлу, открытому операционной системой и идентифицируемому дескриптором файла hFile. При этом не осуществляется никаких проверок режима доступа к файлу и его типа. При уничтожении объекта класса CFile, созданного подобным конструктором файл операционной системы не закрывается. Пользователь может уничтожить его самостоятельно. Третья версия конструктора данного класса создает объект класса CFile и открывает файл операционной системы, путь, к которому указан в аргументе lpszFileName. Этот конструктор можно рассматривать как объединение первой версии конструктора с функцией Open. В случае возникновения ошибок при открытии файла данный конструктор вызывает исключения. В большинстве случаев это означает возникновение фатальной ошибки, о которой должно быть сообщено пользователю.