c语言文件的输入输出

目录

用>和<做重定向

FILE

二进制文件

下一篇:c语言位操作


用>和<做重定向

演示:输入和输出

int num;

scanf("%i",&num);

printf("%d\n",num);

return 0;

 ./test > 12.out

重定向输出到12.out

输入:

就没有了输出

输入到了12.out里面

 

我们用重定向>将12345写入到12.in里面去,ctrl+d结束掉

查看

 

我们把12.in作为输入到上面那个程序里去

就直接输出了123

同样可以./test < 12.in > 12.out

输入和输出就都变成文件了

FILE

stdio.h已经声明好了这个类型

 

一、打开文件的标准代码

    //一个指针fp指向一个FILE(一个结构代表打开文件的信息)

    //fp有fopen函数打开一个文件file参数表示文件名,r表示用来读

    //如果没有打开就返回null

  FILE *fp=fopen("file","r");

  if (fp){ //如果不是null

      fscanf(fp,...);

      fclose(fp);

  } else{ //null

      ...

  }

 

例子:

#include <stdio.h>

int main(int argc,char const* argv[])

{

    FILE *fp=fopen("12.in","r");//r表示读

    if (fp){ //如果不是null

        int num;

        fscanf(fp,"%d\n",&num);//读文件

        printf("%d\n",num);

        fclose(fp);

    } else{//是null

        printf("无法打开文件!\n");

    }

    return 0;

}

效果:

注意:在windows下尝试了很多次都打不开最后改为绝对路径就打开了,这个问题有待考究

 

 

fopen函数

二进制文件

所有文件都是二进制的

文本是最简单的方式可以读写的文件

 

 

二进制文件VS文本

历史:dos用二进制,Unix用文本写配置文件

文本优势:方便人类,跨平台

缺点:输入输出要格式啊,开销大

二进制缺点:人类读写困难,且不跨平台

int的大小不一致,大小端问题

优点:程序读写快

 

程序为什么要文件?

配置:Unix用文本,windows用注册表

数据:稍稍有点量的数据都放数据库了

媒体:这个只能是二进制

现实是,程序通过第三方库读写文件,很少直接读写二进制文件了

 

如果一定要写

用以下函数

fread和fwrite

它们的参数基本一致

二进制读写

第一个参数是要读或写的内存,第二个是内存大小,第三个是又多少个这样的内存,最后是文件指针

返回值是成功读写了多少个字节

为什么要写nitem?

因为二进制文件的读写一般都是通过对一个结构变量的操作来进行的,nitem用来说明这次读写几个结构变量

fwrite就是以二进制写入文件,打开查看也是二进制

 

在文件中定位

ftell得到现在所在的位置fseek

例如:fseek(fp,0L,SEEK_END) //代表从尾算起第零个

ftell(fp)现在也就是得到了文件尾的位置,也就是文件大小

猜你喜欢

转载自blog.csdn.net/weixin_46919419/article/details/112550778