C S tdioFile
一 个 CStdioFile 对 象 代 表 一 个 用 运 行 时 函 数 fopen 打 开 的 C 运 行 时 流 式 文 件 。
文 本 方 式 提 供 对 硬 回 车 — 换 行 符 对 的 特 殊 处 理 。 当 你 将 一 个 换 行 符 ( 0x0A ) 写入 一 个 文 本 方 式 的 CStdioFile 对 象 时 , 字 节 对( 0x0A , 0x0D ) 被 发 送 给 该 文 件 。当 你 读 一 个 文 件 时 , 字 节 对 ( 0x0A , 0x0D ) 被 翻 译 为 一 个 字 节 ( 0x0A ) 。
CStdioFile 不 支 持 Duplicate , LockRange , 和 UnlockRange 这 几 个 CFile 函 数 。如 果 在 CStdioFile 中 调 用 了 这 几 个 函 数 , 将 会 出 现 CNoSupported 异 常 。
有 关 使 用 CStdioFile 的 更 多 信 息 ,参 见“ V isual C++ 程 序 员 指 南 ”中 的 文 章“ MFC 文 件 ” , 和 “ M icrosoft Visual C++ 库 参 考 ” 中 的 “ M icrosoft Visual C++ 6.0 运行 库 参 考 ” 。
#include <afx.h>
请 参 阅 CFile, CFile::Duplicate, CFile::LockRange, CFile::UnlockRange, CNotSupportedException
CStdioFile 类 成 员
Data Members
m_pStream 包 含 了 一 个 指 向 打 开 文 件 的 指 针
Construction
CstdioFile 从 一 个 路 径 或 文 件 指 针 构 造 一 个 CStdioFile 对象
Text Read/Write
ReadString 读 取 一 行 文 本
W riteString 写 一 行 文 本
成 员 函 数
CStdioFile::CStdioFile
CStdioFile( );
CStdioFile( FILE* pOpenStream );
CStdioFile( LPCTSTR lpszFileNam e, UINT nOpenFlags ); throw( CFileException );
参 数
pOpenStream
指 定 由 C 运 行 时 函 数 fopen 调 用 返 回 的 文 件 指 针 。
lpszFileName
指 定 表 示 需 要 文 件 的 路 径 的 字 符 串 。 该 路 径 可 以 是 相 对 路 径 , 也 可 以 是 绝对 路 径 。
nOpenFlags
共 享 和 访 问 方 式 。 指 定 当 文 件 打 开 时 要 进 行 的 动 作 。 可 以 通 过 使 用 位 或O R ( |) 操 作 符 来 组 合 选 项 。 需 要 一 个 访 问 允 许 和 一 个 文 本 — 二 进 制 标 识符 ; create 和 noInherit 方 式 是 可 选 的 。 参 见 CFile::CFile 可 以 获 得 方 式 选项 和 其 它 标 志 的 列 表 。 在 MFC 3.0 及 以 后 版 本 中 , 共 享 标 志 是 允 许 的 。
说 明
此 构 造 函 数 的 缺 省 版 本 与 CFile::Open 成 员 函 数 联 合 工 作 以 测 试 错 误 。
一 个 参 数 的 构 造 函 数 版 本 从 一 个 已 经 打 开 的 文 件 的 指 针 构 造 一 个 CStdioFile 对象 。 允 许 指 针 值 包 括 预 定 义 的 输 入 /输 出 文 件 指 针 stdin , stdout, 和 stderr 。
两 个 参 数 的 构 造 函 数 版 本 构 造 一 个 CStdioFile 对 象 并 根 据 给 定 的 路 径 打 开 相 应的 操 作 系 统 文 件 。
如 果 不 能 被 打 开 或 创 建 则 抛 出 CFileException 。
示 例
// CStdioFile::CStdioFile 示例char* pFileName = "test.dat"; CStdioFile f1;
if( !f1.Open( pFileName, CFile::modeCreate
| CFile::modeWrite | CFile::typeText ) ) { #ifdef _DEBUG
afxDump << "Unable to open file" << "\n"; #endif
exit( 1 );
}
CStdioFile f2( stdout ); TRY
{
CStdioFile f3( pFileName,
CFile::modeCreate | CFile::modeWrite | CFile::typeText );
}
CATCH( CFileException, e )
{
#ifdef _DEBUG
afxDump << "File could not be opened "
<< e->m_cause << "\n"; #endif
}
END_CATCH
CStdioFile::ReadString
virtual LPTSTR ReadString( LPTSTR lpsz , UINT nMax ); throw( CFileException );
BOOL ReadString(CString& rString ); throw( CFileException );
返 回 值
返 回 一 个 指 向 包 含 文 本 数 据 的 缓 存 的 指 针 。 如 果 在 到 达 文 件 结 尾 后 没 有 读 到 任何 数 据 , 则 返 回 NULL ; 或 者 是 返 回 布 尔 值 FALSE 。
参 数
lpsz
指 定 一 个 指 向 用 户 提 供 的 缓 冲 区 的 指 针 ; 该 缓 冲 区 将 接 收 一 个 以 空 字 符结 尾 的 文 本 字 符 串 。
nMax
指 定 要 读 取 的 最 大 字 符 数 , 不 计 算 结 尾 的 空 字 符 。
rString
是 一 个 对 CString 对 象 的 引 用 , 当 函 数 返 回 时 , 该 对 象 将 包 含 了 所 读 取 的字 符 串 。
说 明
此 成 员 函 数 用 来 从 与 CStdioFile 对 象 关 联 的 文 件 中 将 文 本 数 据 读 入 一 个 缓 冲区 , 读 取 的 字 符 数 不 超 过 nMax -1 。 在 碰 到 第 一 个 换 行 符 时 停 止 读 取 。 在 这 种 情况 下 , 如 果 读 取 的 字 符 数 小 于 nMax -1 , 则 将 一 个 换 行 符 保 存 在 缓 冲 区 中 。 在 任何 情 况 下 , 都 在 最 后 添 加 一 个 空 字 符 ( “ 0 ” ) 。
对 于 文 本 方 式 的 输 入 , CFile::Read 也 是 可 用 的 , 但 它 不 会 在 一 个 回 车 换 行 符 处停 止 。
注 意 这 个 函 数 的 CString 版 本 将 “ /n ” 删 除 ( 如 果 有 的 话 ) ; LPTSTR 版 本 则 不 删 除 。
示 例
// example for C S tdioFile::readString extern C S tdioFile f;
char buf[100]; f.ReadString(buf,99);
请 参 阅 CStdioFile::WriteString, CFile::Read
CStdioFile:: W riteString
virtual void WriteString( LPCTSTR lpsz ); throw( CFileException );
lpsz
指 定 一 个 指 向 存 放 了 以 空 字 符 结 尾 的 文 本 字 符 串 的 缓 冲 区 的 指 针 。
说 明
此 成 员 函 数 将 一 个 缓 冲 区 中 的 数 据 写 入 与 CStdioFile 对 象 关 联 的 文 件 中 。 结 束的 空 字 符 ( “ \0 ” ) 不 被 写 入 该 文 件 。 lpsz 中 的 所 有 换 行 符 都 被 以 一 个 硬 回 车
— 换 行 符 对 写 入 该 文 件 。
在 响 应 某 些 条 件 ( 如 磁 盘 已 满 条 件 ) 时 , W irteString 抛 出 一 个 异 常 。
这 是 一 个 面 向 文 本 的 写 函 数 , 它 对 CStdioFile 及 其 后 代 , 以 及 CArchive 来 说 是可 用 的 。 CFile::Write 也 是 可 用 的 , 但 是 它 不 是 在 一 个 空 字 符 处 终 止 , 而 是 将 要求 的 字 节 数 写 入 文 件 中 。
// example for C S tdioFile::WriteString extern C S tdioFile f;
char buf [ ] = “ test string ” ; f.WriteString(buf);
请 参 阅 CArchive::ReadString, CFile::Write
数 据 成 员
CStdioFile::m_pStream
说 明
m_pStream 数 据 成 员 是 指 向 一 个 打 开 文 件 的 指 针 , 该 文 件 是 由 C 运 行 时 函 数