Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс
В этой статье
Представляет файл потока во время выполнения 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(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();
}
Элемент m_pStream
данных — это указатель на открытый файл, возвращаемый функцией fopen
времени выполнения C.
FILE* m_pStream;
Это если NULL
файл никогда не был открыт или закрыт.
Перегружен. 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
.
Считывает текстовые данные в буфер до предела 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);
Переместит указатель в ранее открываемом файле.
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
с объектом.
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
Класс