1 关于对CFile和CArchive的区别 我认为 CFile对象关联一个磁盘上的文件 内有关于对文件操作的各种函数 而CArchive是对一个缓冲区(内存中)的关联 内有许多对缓冲区的操作,而且重载了“《”“》”,还提供了一些安全机制和保护。不知道我理解的对否?2 如果想对一个文件进行另存 我看了一个网上的例程 1先创造一个CFile对象 关联该文件 2然后读取入一个Bufffer数组 3把Buffer数组读入CArchive对象 4CArchive对象再写入一个新的CFile对象。
  这样是不是多此一举了?第二步完全可以省略 因为可以把一个CFile对象串行化进一个CArchive 然后CArchive在并行化进一个新的CFile就可以了 是不是这样呢?3 谁能和我说说内存映射文件为什么比一个缓冲区来传递大文件要优越的多呢?

解决方案 »

  1.   

    1、CFile是用于访问文件的类;CArchive是构建在文件之上,用于储存各种类对象数据的类,为对象数据的储存和载入提供了比较方便的方法。
    2、程序设计中完全可以通过直接读写文件来实现数据的保存和载入,就像直接调用系统API来访问文件而不使用CFile类一样,只是有些时候使用MFC类可能更方便一些。
    3、常规方式访问文件需要经过很多中间过程,用文件映射的方式可以省略掉一些不必须的中间过程,从而节省中间过程所需要的资源(CPU、内存),在通常情况下,中间过程所占用的资源是可以忽略不计的,但在频繁访问文件时(例如上百万次读写),中间过程占用的CPU时间就很多了,在大量读写数据时,中间过程所占用的内存缓冲区容量也非常大,在这些时候使用文件映射有较好的效果。
      

  2.   

    CArchiveCArchive没有基类。
    CArchive允许以一个永久二进制(通常为磁盘存储)的形式保存一个对象的复杂网络,它可以在对象被删除时,还能永久保存。可以从永久存储中装载对象,在内存中重新构造它们。使得数据永久保留的过程就叫作“串行化”。
    可以把一个归档对象看作一种二进制流。象输入/输出流一样,归档与文件有关并允许写缓冲区以及从硬盘读出或读入数据。输入/输出流处理一系列ASCII字符,但是归档文件以一种有效率、精练的格式处理二进制对象。
    必须在创建一个CArchive对象之前,创建一个CFile对象。另外,必须确信归档文件的装入/存储与文件的打开模式是兼容的。每一个文件只限于一个活动归档文件。
    当构造一个CArchive对象时,要把它附加给表示一个打开文件的类CFile(或派生类)的对象上。还要指定归档文件将用于装载还是存储。
    CArchive对象不仅可以处理首要类型,而且还能处理为串行化而设计的CObject派生类的对象。一个串行化类通常有一个Serialize成员函数并且使用DECLARE_SERIAL和IMPLEMENT_SERIAL宏。这些在CObject类中有所描述。
    重载提取(>>)和插入(<<)是方便的归档编程接口。它支持主要类型和CObject派生类。
    CArchive还支持使用MFC Windows套接字类CSocket和CSocketFile编程。IsBufferEmpty成员函数也支持这种使用。如果要了解有关CArchive的更多信息,请参阅联机文档“Visual C++ 程序员指南”中的“串行化(永久对象)” 和“Windows套接字:在归档文件中使用套接字”