个没有参数的构造函数。
CFile::Open()函数的原型为:
virtual BOOL Open(
LPCTSTR lpszFileNcom,
UINT nOpenFlags,
CFileException* pError = NULL
);
该函数的第一个参数和第二个参数跟CFile 的构造函数中的对应参数意义相同。而第三
个参数可以获得打开文件失败产生的CFileException 对象的指针,这样就可以获得打开失败
的具体原因,CFileException 类将在8.2.5 小节中叙述。同时,CFile::Open()函数的返回值还
给出了打开cāo作是否成功。当返回FALSE 时,打开失败,就可以用pError 获得失败的原因。
而如果pError 为NULL 时,则不会获得CFileException 对象。
8.2.2 读写cāo作
打开文件后就可以用读写cāo作对文件数据进行读写。本节开头提到CFile 是一个通用的
二进制文件cāo作接口,故通过CFile 只能以二进制方式读写文件。CFile 的读写cāo作主要通过
CFile::Read()和CFile::Write()函数完成。
CFile::Read()函数用于从文件中读取数据,原型为:
virtual UINT Read(
void* lpBuf,
UINT nCount
);
CFile::Write()函数用于向文件写入数据,原型为:
virtual void Write(
const void* lpBuf,
UINT nCount
);
这两个函数具有同样的参数。
枫叶文学网www.fywxw.com
第8 章 文件cāo作
·191·
? 参数lpBuf:指向用户提供的缓冲区以接收从文件中读取的数据。
? 参数nCount:给出可以从文件中读出或者向文件中写入的字节数的最大值。对于文本
模式的文件,回车换行只作为一个字符。
? Read()函数返回值:用于获得传输到缓冲区的字节数。如果到达文件尾,则返回值可
能比nCount 小。
下面给出PersonData 示例中读文件的语句(在CPersonDataDlg::InitDialog()函数中):
//读取个人信息数据
int result; //获得返回值
PersonInfo pi; //用户信息缓冲区
//循环知道读入的数据字节数为0
while (result=m_File.Read(&pi,sizeof(PersonInfo)))
{
//在列表中添加人名
m_PersonList.AddString(pi.szNcom);
}
上述代码中m_File 是一个已经打开文件的CFile 对象,代码循环从文件中读取PersonInfo
结构,并送至pi 变量中,