WEB开发网
开发学院软件开发VC Visual C++中对象的序列化与文件I/O研究 阅读

Visual C++中对象的序列化与文件I/O研究

 2008-11-13 19:32:36 来源:WEB开发网   
核心提示: 文件读写是最常用的文件操作方式,主要由CFile类成员函数Read()、Write()来实现,Visual C++中对象的序列化与文件I/O研究(7),其函数原型分别为:UINT Read( void* lpBuf, UINT nCount );void Write( const void

文件读写是最常用的文件操作方式,主要由CFile类成员函数Read()、Write()来实现。其函数原型分别为:

UINT Read( void* lpBuf, UINT nCount );

void Write( const void* lpBuf, UINT nCount );

参数lpBuf为指向存放数据的缓存的指针,nCount为要读入或写入的字节数,Read()返回的为实际读取的字节数,该数值小于或等于nCount,如果小于nCount则说明已经读到文件末尾,可以结束文件读取,如继续读取,将返回0。因此通常可以将实际读取字节数是否小于指定读取的字节数或是否为0作为判断文件读取是否到达结尾的依据。下面这段代码演示了对文件进行一次性写入和循环多次读取的处理过程:

// 创建、写入方式打开文件
CFile file;
file.Open("C:TestFile.txt", CFile::modeWrite | CFile::modeCreate);
// 写入文件
memset(WriteBuf, 'a', sizeof(WriteBuf));
file.Write(WriteBuf, sizeof(WriteBuf));
// 关闭文件
file.Close();
// 只读方式打开文件
file.Open("C:TestFile.txt", CFile::modeRead);
while (true)
{
// 读取文件数据
int ret = file.Read(ReadBuf, 100);
……
// 如果到达文件结尾则中止循环
if (ret < 100)
break;
}
// 关闭文件
file.Close();

Write()和Read()函数执行完后将自动移动文件指针,因此不必再显示调用Seek()函数去定位文件指针。包含有文件定位函数的完整代码如下所示:

// 创建、写入方式打开文件
CFile file;
file.Open("C:TestFile.txt", CFile::modeWrite | CFile::modeCreate);
// 写入文件
memset(WriteBuf, 'a', sizeof(WriteBuf));
file.SeekToBegin();
file.Write(WriteBuf, sizeof(WriteBuf));
// 关闭文件
file.Close();
// 只读方式打开文件
file.Open("C:TestFile.txt", CFile::modeRead);
while (true)
{
// 文件指针
static int position = 0;
// 移动文件指针
file.Seek(position, CFile::begin);
// 读取文件数据
int ret = file.Read(ReadBuf, 100);
position += ret;
……
// 如果到达文件结尾则中止循环
if (ret < 100)
break;
}
// 关闭文件
file.Close();

小结

持久性和文件I/O是程序保持和记录数据的一种重要方法,这两种不同的处理方法虽然功能上有些接近但实现过程却大不相同。而且这两种处理方法各有优势,读者在编程过程中应根据实际情况而灵活选用。

上一页  2 3 4 5 6 7 

Tags:Visual 对象 序列化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接