分类: C/C++
2008-04-08 18:01:05
// 将VarA、VarB存储到档案中 CArchive ar (&file, CArchive::store); ar << VarA << VarB; …… // 从档案装载VarA、VarB CArchive ar (&file, CArchive::load) ar >> VarA >> VarB; |
void CSample04View::OnLButtonDown(UINT nFlags, CPoint point) { // 获取指向文档类的指针 CSample04Doc* pDoc = GetDocument(); // 保存当前鼠标点击位置 pDoc->m_ptPosition[pDoc->m_nCount] = point; if (pDoc->m_nCount < 100) pDoc->m_nCount++; // 刷新屏幕 Invalidate(); CView::OnLButtonDown(nFlags, point); } …… void CSample04View::OnDraw(CDC* pDC) { CSample04Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // 对点击的点进行连线绘图 pDC->MoveTo(pDoc->m_ptPosition[0]); for (int i = 1; i < pDoc->m_nCount; i++) pDC->LineTo(pDoc->m_ptPosition[i]); } |
if (ar.IsStoring()) { // 存储持久性对象到档案 ar << m_nCount; for (int i = 0; i < m_nCount; i++) ar << m_ptPosition[i]; } else { // 从档案装载持久性对象 ar >> m_nCount; for (int i = 0; i < m_nCount; i++) ar >> m_ptPosition[i]; } |
// CPosition类声明部分: class CPosition : public CObject { DECLARE_SERIAL(CPosition) CPosition(); int m_nCount; CPoint m_ptPosition[100]; void Serialize(CArchive& ar); CPoint GetValue(int index); void SetValue(int index, CPoint point); virtual ~CPosition(); }; …… // CPosition类实现部分: IMPLEMENT_SERIAL(CPosition, CObject, 0) CPosition::CPosition() { // 对类成员进行初始化 m_nCount = 0; for (int i = 0; i < 100; i++) m_ptPosition[i] = CPoint (0, 0); } CPosition::~CPosition() { } void CPosition::SetValue(int index, CPoint point) { // 设置指定点的坐标值 m_ptPosition[index] = point; } CPoint CPosition::GetValue(int index) { // 获取指定点的坐标值 return m_ptPosition[index]; } void CPosition::Serialize(CArchive &ar) { CObject::Serialize(ar); if (ar.IsStoring()) { // 存储持久性对象到档案 ar << m_nCount; for (int i = 0; i < m_nCount; i++) ar << m_ptPosition[i]; } else { // 从档案装载持久性对象 ar >> m_nCount; for (int i = 0; i < m_nCount; i++) ar >> m_ptPosition[i]; } } |
void CSample04Doc::Serialize(CArchive& ar) { // 使用定制持久类 m_Position.Serialize(ar); if (ar.IsStoring()) { } else { } } |
// 先构造一个实例,然后再打开文件 CFile file; file.Open(“C:\\TestFile.txt”, CFile::modeReadWrite); …… // 直接通过构造函数打开文件 CFile file(“C:\\TestFile.txt”, CFile::modeReadWrite); |
文件模式标志 |
说明 |
CFile::modeCreate | 创建方式打开文件,如文件已存在则将其长度设置为0 |
CFile::modeNoInherit | 不允许继承 |
CFile::modeNoTruncate | 创建文件时如文件已存在不对其进行截断 |
CFile::modeRead | 只读方式打开文件 |
CFile::modeReadWrite | 读写方式打开文件 |
CFile::modeWrite | 写入方式打开文件 |
CFile::shareCompat | 在使用过程中允许其他进程同时打开文件 |
CFile::shareDenyNone | 在使用过程中允许其他进程对文件进行读写 |
CFile::shareDenyRead | 在使用过程中不允许其他进程对文件进行读取 |
CFile::shareDenyWrite | 在使用过程中不允许其他进程对文件进行写入 |
CFile::shareExclusive | 取消对其他进程的所有访问 |
CFile::typeBinary | 设置文件为二进制模式 |
CFile::typeText | 设置文件为文本模式 |
UINT Read( void* lpBuf, UINT nCount ); void Write( const void* lpBuf, UINT nCount ); |
// 创建、写入方式打开文件 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(); |
// 创建、写入方式打开文件 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(); |