| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 518 人关注过本帖
标题:C++ 文件流的一些操作
只看楼主 加入收藏
w123401185
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2013-4-7
结帖率:100%
收藏
 问题点数:0 回复次数:3 
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
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
科普?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-11 10:54
如蜗牛
Rank: 2
等 级:论坛游民
威 望:1
帖 子:40
专家分:42
注 册:2013-4-12
收藏
得分:0 
虽然read中有一些不经意出现的笔误,但整体解释很是详细,尤其write函数,对我们这些只知其然不知所以然的人,相当有帮助,若能对read做更深入的解释,那就更加感激了~~~
2013-04-13 16:42
aialors
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2012-11-25
收藏
得分:0 
文件一直没弄明白
2013-04-13 17:17
快速回复:C++ 文件流的一些操作
数据加载中...
 
   



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

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