c/c++文件的基本操作

来源:互联网 发布:mac ps如何导入字体 编辑:程序博客网 时间:2024/06/06 17:53

4.1 5.1 6.1 7.1 8.1 9.1 按 来关闭窗口…

前言:本博客内容简略,只是用于记录,方便以后复习查阅。


一、这里的所说的文件是什么意思

不要觉得我们说的文件就是指txt,或者doc才是文件,其实计算机里面的年东西都是文件。当我们用专门的软件打开他们的时候,可以看到里面的东西,有内存也有二进制代码什么的。

二、打开一个文件

打开一个文件的格式

    FILE *p = fopen("/home/zouux/666","wb");//第一个参数是文件的绝对路径这里的路径为linux下的,如果没有这个666文件,会自动创建一个这个文件,第二个参数为模式,这里为写模式    if(p == NULL)//固定格式    {        cout << "fail to open file" << endl;        return -1;    }

注意:模式“wb”有一个问题是打开这个文件时会先清空这个文件,如果你想接着以前存在的内容继续写,应该用“ab”模式。

三、写东西进去

首先需要说,将一个数字或者字符串,更或者一个结构体写进文件,可以用到两个函数,一个是fwrite,还有一个是fprintf。

写一个数字:

int a = 1;fwrite(&a,1,sizeof(a),p);/或者fprintf(p,"%d",a);

写一个字符串:

char str[] = "hello,zouxu";fwrite(str,1,11,p);//或者fprintf(p,"%s",str);

重点来了:关于fwrite和fprintf
fwrite写进文件的是二进制数据,专门给计算机读的,用文本打开这个文件是一段乱码。而fprintf写进去的是人们认得到的字符,本质上两种写入方式都对。只不过一个针对计算机。

fwrite第一个参数为写进去的东西的地址,第二个固定为1,第三为写的东西的字符长度,第四个为文件指针。

fprintf第一个参数为文件指针,第二个为写进去的格式(数据类型),第三个为要写进去的名字。

四、关闭文件

fclose(p);//p为文件指针

注意:使用完文件一定要记住关闭。

五、读取文件数据

步骤:先打开文件———在读取数据———关闭文件

    FILE *p1 = fopen("/home/zouux/666","rb");//注意:这里模式必须为rb    if(p1 == NULL)    {        cout << "fail to open file" << endl;        return -1;    }    char buff[100];//定义一个缓冲区,用于保存读取出来的数据    fread(buff,1,100,p1);//第一参数为保存的地址,第二个固定为1,第三个为读多少数据,最后一个为文件指针    cout << buff;    fclose(p1);

注意:这里的缓冲区为一个数组,又是也可以为一个变量。比如:

    FILE *p1 = fopen("/home/zouux/666","rb");    if(p1 == NULL)    {        cout << "fail to open file" << endl;        return -1;    }    while(!feof(p1))    {        double ss;//这里就为一个缓冲变量,存储读出来的一个数据        fread(&ss,1,8,p1);//每次读取八字节        cout << ss <<endl;    }    fclose(p1);    return 0;

六、数据的有效存储格式

前面有提到用fprintf写数据时,如果写的时候格式为%d%d,那么存进去的数据读不出来,如果为%d,%d还可以。这时候用fwrite就体现了他的好处,因为用这个存的格式是可以通过read读出来的,不用特意去安排格式。

所以这里介绍一种最简单的存储格式:按字节存储并按形同字节读取。那么这样读出来的数据一定为原始数据,不会错位。

补充:char类型为1个字节 , short为2字节, int为4字节 ,double、float为8字节

所以存储数据时都统一用double类型的数据,也就是每次写八字节:

 FILE *p = fopen("/home/zouux/666","wb");    if(p == NULL)    {        cout << "fail to open file" << endl;        return -1;    }    int i;    double b=0.1;    for(i=0;i<=100;i++)    {        fwrite(&b,1,8,p);        b=b+1.0;    }    fclose(p);

读数据时每次读8字节:

  FILE *p1 = fopen("/home/zouux/666","rb");    if(p1 == NULL)    {        cout << "fail to open file" << endl;        return -1;    }    while(!feof(p1))//这个函数用于检测是否到结尾    {        double ss;        fread(&ss,1,8,p1);        cout << ss <<endl;    }    fclose(p1);    return 0;

补充:关于feof函数,这个函数用于检测文件指针是否到结尾,因为在创建文件指针时,它是指向第一个数据的,每次执行完read都会向后移动一段距离,距离为该次read读了多少字节的数据。这种读取适用于数据很大,无法一次性读取玩(fread(&ss,1,8,p1);中第三参数就是每次读多少,如果他就等于这些数据总共的大小,就是一次性读完。但是如果他不是,就是分批次读完,这时候就需要feof来检测是否到结尾)

七、读取数字数据保存在一个数组中

    FILE *p1 = fopen("/home/zouux/666","rb");    if(p1 == NULL)    {        cout << "fail to open file" << endl;        return -1;    }    double shuzu[15];    int k=0;    while(!feof(p1))    {        fread(&shuzu[k],1,8,p1);        k++;    }    for(int j=0;j<=9;j++)        cout << shuzu[j] << " ";    fclose(p1);
原创粉丝点击