Класс CStdioFile

Представляет файл потока во время выполнения C, открытый функцией fopenвремени выполнения.

Синтаксис

class CStdioFile : public CFile

Участники

Открытые конструкторы

Имя Описание
CStdioFile::CStdioFile CStdioFile Создает объект из указателя пути или файла.

Открытые методы

Имя Описание
CStdioFile::Open Перегружен. Open предназначен для использования с конструктором по умолчанию CStdioFile (переопределения CFile::Open).
CStdioFile::ReadString Считывает одну строку текста.
CStdioFile::Seek Позиционирует текущий указатель на файл.
CStdioFile::WriteString Записывает одну строку текста.

Открытые члены данных

Имя Описание
CStdioFile::m_pStream Содержит указатель на открытый файл.

Замечания

Потоковые файлы буфериируются и могут быть открыты в текстовом режиме (по умолчанию) или в двоичном режиме.

Текстовый режим обеспечивает специальную обработку пар канала возврата каретки. При записи символа канала строки (newline) (0x0A) в объект текстового режима CStdioFile пара байтов (0x0D, 0x0A) отправляется в файл. При чтении пара байтов (0x0D, 0x0A) преобразуется в один 0x0A байт.

CFile Функции Duplicateи LockRangeUnlockRange не поддерживаются для CStdioFile.

При вызове этих функций в объекте CStdioFileвы получите CNotSupportedException.

Дополнительные сведения об использовании CStdioFileсм. в статьях "Файлы в MFC" и "Обработка файлов" в справочнике по библиотеке времени выполнения.

Иерархия наследования

CObject

CFile

CStdioFile

Требования

Заголовок.afx.h

CStdioFile::CStdioFile

Создает и инициализирует объект CStdioFile.

CStdioFile();
CStdioFile(CAtlTransactionManager* pTM);
CStdioFile(FILE* pOpenStream);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM);

Параметры

pOpenStream
Указывает указатель файла, возвращаемый вызовом функции fopenвремени выполнения C.

lpszFileName
Указывает строку, которая является путем к нужному файлу. Путь может быть как относительным, так и абсолютным.

nOpenFlags
Задает параметры для создания файлов, общего доступа к файлам и режимов доступа к файлам. Можно указать несколько параметров с помощью побитового оператора OR ( | ).

Требуется один параметр режима доступа к файлам; другие режимы являются необязательными. См CFile::CFile . список параметров режима и других флагов. В MFC версии 3.0 и более поздних версиях разрешены флаги общего доступа.

pTM
Указатель на объект CAtlTransactionManager.

Замечания

Конструктор по умолчанию не присоединяет файл к объекту CStdioFile . При использовании этого конструктора необходимо использовать CStdioFile::Open метод для открытия файла и присоединения его к объекту CStdioFile .

Конструктор с одним параметром присоединяет открытый поток файлов к объекту CStdioFile . Допустимые значения указателя включают предопределенные указатели входных и выходных stdinфайлов , stdoutили stderr.

Конструктор двух параметров создает CStdioFile объект и открывает соответствующий файл с заданным путем.

Если вы передаете NULL либо pOpenStream , lpszFileNameконструктор создает исключение CInvalidArgException*.

Если файл не может быть открыт или создан, конструктор создает исключение CFileException*.

Пример

TCHAR* pFileName = _T("CStdio_File.dat");
CStdioFile f1;
if(!f1.Open(pFileName, CFile::modeCreate | CFile::modeWrite 
   | CFile::typeText)) 
{
   TRACE(_T("Unable to open file\n"));
}

CStdioFile f2(stdout);
try
{
   CStdioFile f3( pFileName,
      CFile::modeCreate | CFile::modeWrite | CFile::typeText );
}
catch(CFileException* pe)
{
   TRACE(_T("File could not be opened, cause = %d\n"),
      pe->m_cause);
   pe->Delete();
}

CStdioFile::m_pStream

Элемент m_pStream данных — это указатель на открытый файл, возвращаемый функцией fopenвремени выполнения C.

FILE* m_pStream;

Замечания

Это если NULL файл никогда не был открыт или закрыт.

CStdioFile::Open

Перегружен. Open предназначен для использования с конструктором по умолчанию CStdioFile .

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM,
    CFileException* pError = NULL);

Параметры

lpszFileName
Строка, которая представляет собой путь к нужному файлу. Путь может быть как относительным, так и абсолютным.

nOpenFlags
Режим общего доступа и общего доступа. Указывает действие, которое необходимо предпринять при открытии файла. Параметры можно объединить с помощью побитового оператора OR (|). Требуется одно разрешение на доступ и один вариант общего доступа; Режим modeCreate и modeNoInherit являются необязательными.

pError
Указатель на существующий объект исключения файла, который получит состояние неудачной операции.

pTM
Указатель на CAtlTransactionManager объект.

Возвращаемое значение

Значение TRUE в случае успешного выполнения; в противном случае — значение FALSE.

Замечания

CStdioFile::ReadString

Считывает текстовые данные в буфер до предела nMax–1 символов из файла, связанного CStdioFile с объектом.

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

Параметры

lpsz
Указывает указатель на предоставленный пользователем буфер, который получит текстовую строку, завершающую значение NULL.

nMax
Указывает максимальное число символов для записи в lpsz буфер, включая завершающий значение NULL.

rString
Ссылка на CString объект, содержащий строку при возврате функции.

Возвращаемое значение

Указатель на буфер, содержащий текстовые данные. NULL Значение , если конечный файл достигнут без чтения данных; или если логическое значение, FALSE если конечный файл достигнут без чтения данных.

Замечания

Чтение останавливается первым символом новой строки. Если в этом случае в буфере сохраняется менее nMax1 символов. Символ NULL ('\0') добавляется в любом случае.

CFile::Read также доступен для ввода в текстовом режиме, но он не завершается парой канала возвращаемой строки каретки.

Примечание.

Версия CString этой функции удаляет '\n' версию, если она присутствует; LPTSTR версия не выполняется.

Пример

CStdioFile f(stdin);
TCHAR buf[100];

f.ReadString(buf, 99);

CStdioFile::Seek

Переместит указатель в ранее открываемом файле.

virtual ULONGLONG Seek(
    LONGLONG lOff,
    UINT nFrom);

Параметры

lOff
Количество байтов для перемещения указателя.

nFrom
Режим перемещения указателя. Необходимо установить одно из следующих значений.

  • CFile::begin: переместите указатель lOff файла вперед с начала файла.

  • CFile::current: перемещение байтов указателя lOff файла из текущей позиции в файле.

  • CFile::end: перемещение байтов указателя lOff файла из конца файла. Обратите внимание, что lOff для поиска в существующем файле должны быть отрицательные значения. Положительные значения будут искать в конце файла.

Возвращаемое значение

Если запрошенная позиция является законной, Seek возвращает новое смещение байтов с начала файла. В противном случае возвращаемое значение не определено, и CFileException создается объект.

Замечания

Функция Seek разрешает случайный доступ к содержимому файла путем перемещения указателя на указанный объем, абсолютно или относительно. Данные на самом деле не считываются во время поиска. Если запрошенная позиция превышает размер файла, длина файла будет расширена до этой позиции, и исключение не будет создано.

При открытии файла указатель файла размещается в смещение 0, начало файла.

Эта реализация Seek основана на функции fseekбиблиотеки времени выполнения (CRT). Существует несколько ограничений Seek на использование потоков, открытых в текстовом режиме. Дополнительные сведения см. в разделе fseek, _fseeki64.

Пример

В следующем примере показано, как Seek перемещать указатель на 1000 байт с начала cfile файла. Обратите внимание, что Seek данные не считываются, поэтому впоследствии необходимо вызвать CStdioFile::ReadString чтение данных.

CStdioFile cfile(_T("Stdio_Seek_File.dat"), CFile::modeWrite |
   CFile::modeCreate);
LONGLONG lOff = 1000;
ULONGLONG lActual = cfile.Seek(lOff, CFile::begin);

CStdioFile::WriteString

Записывает данные из буфера в файл, связанный CStdioFile с объектом.

virtual void WriteString(LPCTSTR lpsz);

Параметры

lpsz
Указывает указатель на буфер, содержащий строку, завершающую значение NULL.

Замечания

Завершающий символ NULL ( \0) не записывается в файл. Этот метод записывает в файл новые символы строки в lpsz виде пары канала возвращаемой строки каретки.

Если вы хотите записать данные, которые не завершаются значением NULL в файл, используйте CStdioFile::Write или CFile::Write.

Этот метод вызывает исключение CInvalidArgException* , указывая NULL для lpsz параметра.

Этот метод выдает CFileException* ответ на ошибки файловой системы.

Пример

CStdioFile f(stdout);
TCHAR buf[] = _T("test string");

f.WriteString(buf);

См. также

CFile Класса
Диаграмма иерархии
CFile Класса
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException Класса