Класс 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
и LockRange
UnlockRange
не поддерживаются для CStdioFile
.
При вызове этих функций в объекте CStdioFile
вы получите CNotSupportedException
.
Дополнительные сведения об использовании CStdioFile
см. в статьях "Файлы в MFC" и "Обработка файлов" в справочнике по библиотеке времени выполнения.
Иерархия наследования
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
если конечный файл достигнут без чтения данных.
Замечания
Чтение останавливается первым символом новой строки. Если в этом случае в буфере сохраняется менее nMax
1 символов. Символ 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
Класс