| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 519 人关注过本帖
标题:C++ 文件流的一些操作
取消只看楼主 加入收藏
w123401185
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-4-7
结帖率:100%
收藏
 问题点数:0 回复次数:0 
C++ 文件流的一些操作
对于C++的文件操作,本人没搞太明白。现在只是将某些操作与需要注意的地方介绍给大家。

基于流的操作:
    1.文件流 write 成员函数
        将一个类对象的二进制表示记录到数据文件中:
        #include <iostream>
        #include <fstream>
        #include <Date.h> // 这个是一个时间类
        using namespace std;
        int main()
        {
            Date dat(6, 24, 1940);
            struct date{
                int mo, da, yr;
            }dt;
            dat.GetDate(dt.mo, dt.da, dt.yr);
            ofstream of("data.dat", ios::binary);
            if(!of.fail()){   //打开文件成功
                of.write(reinterpret_cast<char*> (&dt), sizeof dt);
            }
            return 0;
        }
解释:程序先用Date类实例化一个Date对象,然后声明一个通用型数据结构,并使用Date::GetDate把Date对象的月、日、年份值装入date结构的数据成员中。接下来进行文件写入。
*这里值得注意的是,为什么要使用一个中间过度的结构体,而不直接将对象写入?
首先,一个类我们可能不知道它的内部设计,可能不知道它如何实现数据表示。
其次,如果类修改后,我们就要重新编译全部程序,并转换所有与以前数据有关的数据文件。
最重要的是,类中可能有一个或多个虚函数,这样的话,它的数据成员中将包含一个隐藏的私用指针(vptr),该指针指向类的虚表(vtbl)。没有任何标准规定,编译器必须把vptr数据成员放在对象存储器的哪个位置上,因此,在程序的移植过程中不能忽视它的存在。我们也不能引用vptr数据成员,甚至不能用成员函数引用它。因此,我们不能保存和恢复它的值。如果我们想从文件中将vptr值读取到另一个程序对象中,可能造成其他程序的指针具有无特殊指向的无用值。这样,当程序为执行一个虚函数二访问vptr,程序就会崩溃。

    2.文件流read成员函数
    #include <fstream>
    #include <Date.h>
    int main()
    {
        struct date{
            int mo, da, yr;
        }dt;
        ifstream fi("date.dat", ios::binary);
        if(!fi.fail()){
            if.read(reinterpret_cast<char*> (&dt), sizeof dt);
            Date dat(dt.mo, dt.da, da.yr);
            cout << dat;   //对 << 进行了重载
        }
        return 0;
    }
结果会显示: "6/24/1940"。
搜索更多相关主题的帖子: namespace include 二进制 write 
2013-04-11 10:32
快速回复:C++ 文件流的一些操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012275 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved