C与C++简单文件操作比较

为了更加深刻地理解C与C++对文件操作,本文以一个简单的文件读写操作为实例(分别含C和C++源程序),来简单分析一下C与C++在文件操作上的区别。
首先,从头文件的角度出发:对于C++,其最大的特点是引入了“类”的概念,所以对文件的操作首先就要含有文件流的类的函数的头文件,即#include<fstream>;而C语言中无此概念,因而不需要额外的头文件。
其次,从文件的写操作上分析:C++的操作是对对象的操作,因此首先应该创建写文件流的对象,即ofstream outfile,(其中ofstream是头文件fstream中的一个类),对对象outfile的初始化主要包括:写操作文件的名称(如,myfile.dat)和文件操作的方式(ios::out表示写),对对象的操作都是通过函数成员(close())实现的;在C中是通过文件指针(FILE *fpin)和相应的库函数(fopen、close)来实现的,其中fopen也包含写操作文件的名称和文件操作方式(“r”)这两大参数。其中,要注意两种语言都要对操作后的对象(或指针)进行判断,若为空,则退出,以此来保证程序的有效执行。(若没有此判断,则后续关于文件数据的操作就是一个大的BUG)。对文件写操作结束后来及时的关闭文件,以释放空间。
再次,从文件的读操作上分析:与写操作类似,C++都是通过创建对象,对象调用成员函数实现的;而C则是通过文件指针,对库函数的调用实现的。
C++语言:
<span style="font-family: Arial, Helvetica, sans-serif;">#include<iostream></span>
#include<fstream>//含文件流操作头文件
#include<stdlib.h>
using namespace std;
int main()
{
    int a,mymax=-9999;
    ofstream outfile("myfile.dat",ios::out);//创建写文件对象
    if(!outfile)//判断文件打开是否成功
    {
        cerr<<"open wrong!\n";
        exit(1);
    }
    for(int i=0;i<10;i++)//向文件写入数据
    {
        cin>>a;
        outfile<<a<<endl;
    }
    outfile.close();//关闭文件
    ifstream infile("myfile.dat",ios::in);//创建文件读对象
    if(!infile)<span style="font-family: Arial, Helvetica, sans-serif;">//判断文件打开是否成功</span>
    {
        cerr<<"open wrong\n";
        exit(1);
    }
    while(infile>>a)//读取文件的数据
    {
        if(mymax<a)//找出文件数据中的最大者
            mymax=a;
    }
    cout<<"Max="<<mymax<<endl;//输出最大者
    infile.close();//关闭文件
    return 0;
}

C语言:

</pre><pre name="code" class="objc">#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fpin,*fpout;
    int a,i,mymax=-99999;
    fpin=fopen("myfile.dat","w");//以写的方式打开文件
    if(!fpin)//判断文件打开是否成功
    {
        printf("open wrong\n");
        exit(1);
    }
    for(i=0;i<10;i++)//向文件写入数据
    {
        scanf("%d",&a);
        fprintf(fpin,"%d\n",a);
    }
    printf("写入完成!\n");//写入完成提示
    fclose(fpin);//关闭文件
    fpout=fopen("myfile.dat","r");//以读的方式打开文件
    if(!fpout)//判断文件是否打开成功
    {
        printf("open wrong\n");
        exit(1);
    }
    while(!feof(fpout))//判断是否到文件尾
    {
        fscanf(fpout,"%d",&a);//从文件中读取数据
        if(a>mymax)//找出文件数据中的最大者
            mymax=a;
    }
    fclose(fpout);//关闭文件
    printf("Max=%d\n",mymax);//输出最大者
    return 0;
}

C、C++文件操作的一般模板:

//必要的头文件
int main()
{
    //创建对象、或指针
    //文件打开方式(只读、只写或其它)
    //判断打开文件是否成功
    //进行读写操作
    //关闭文件,释放空间
    return 0;
}


小结:1)关于C++文件读、写操作中应注意包含必要的头文件:#include<fstream>;而C语言中不含此文件;

2)关于C++主要通过创建文件流对象(文件名+打开方式),由文件流对象调用相应的成员函数(close())来实现;而C中通过创建文件指针,并调用相关的库函数(close(),feof(),fscanf(),fprintf())来实现。

3)无论是C还是C++都应该注意,对文件打开操作后应立即判断其指针或对象是否为空;并且在文件操作结束后及时关闭文件,释放空间。

P.S:关于文件的简单读写,其实和将数据从键盘输入、输出有很多相似之处。如,从键盘输入数据:在C中,scanf("%d",&a),而输入到文件中为:fprintf(fpout,"%d",a);

对于从标屏输出数据:在C中,printf("%d\n",a),而从文件读取数据为fscanf(fpout,"%d",&a).(C++也是类似的)这样一看,是不是有点“反”着来的感觉?

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值