23.C++文件操作考研基础

事先声明:代码编辑时使用的是CLion,Visual Stdio存在部分差异,此处不予讨论

目录

​编辑

一、读写文件原理

二、文件打开关闭

1.fopen()

2.fclose()

三、文件读写

1.fwrite() 、fread()

(2)fputc()、fgetc()

(3)fgets()

四、文件位置指针偏移

1.应用场景

2.fseek()、ftell()

(1)fseek()介绍

(2)实现

一、读写文件原理

从磁盘中读取内容,为了提高效率,创建缓冲区,实质为在内存中开辟的一部分空间

二、文件打开关闭

1.fopen()

需要提前创建一个file.txt文件(在如下层级创建)

    FILE *fp;//文件指针
    //打开文件
    fp = fopen("file.txt", "r+");
    //判断是否正确打开
    if (NULL == fp) {
        perror("fopen");//定位失败原因
        return -1;
    }

r:只读        w:只写

r+:可读可写        w+:可读可写

rb+二进制        wb+二进制

区别:1.r+以文本进行时,\n写入磁盘时是\r\n;rb+二进制不会

        2.w+没有文件会创建文件,但if文件中有内容会刷掉

2.fclose()

fclose(fp);

三、文件读写

1.fwrite() 、fread()

读写字符串

//已经打开文件
char buf[20]="hello\nworld";

fp.fwrite(buf,sizeof(char),strlen(buf),fp);
//读取buf中的ele,每个ele大小为sizeof(char),总共长度为strlen(buf),从fp开始写入
//新建一个char[]存储读取的内容
char buf1[20]={0};
fread(buf1,sizeof(char),sizeof(buf1),fp);
//存储到buf1中,每个ele大小为sizeof(char),最多能读取sizeof(buf1)个ele,从fp开始读取

(2)fputc()、fgetc()

读写单个字符
char c;

//写单个字符
fputc('H',fp);
//把字符H写在最后

//读
c = fgetc(fp);
//fgetc()返回单个字符,结尾返回EOF

//读所有字符
while((c=fgetc(fp))!=EOF){
    printf("%c",c);
}

(3)fgets()

读整行字符

char buf[20]={0};

//1.读取一行ele
fp.fgets(buf,sizeof(buf),fp);
//读取到buf中,一次最多读取sizeof(buf)的字符串,从fp开始

//2.读从键盘中输入的ele
fp.fgets(buf,sizeof(buf),stdio);

//3.读取全文
while(fp.fgets(buf,sizeof(buf),fp) != NULL){
    printf("%s",buf);
}

attn:fgets()在读取时会读取\n

四、文件位置指针偏移

1.应用场景

在写入ele之后,指针指向结尾,我想读取写入的内容,让指针前移即可

2.fseek()、ftell()

(1)fseek()介绍

fseek(fp,offset,origin)

offset是移动多少,往前移是负数

origin设置从哪移动,0开头,1当前位置,2结尾

(2)实现

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

char str[] = "hello\nworld";
//写入内容
fwrite(str,sizeof(char),strlen(str),fp);

//此时指针在最后
int i; 
//if移动成功返回0,else返回非0
i = fseek(fp,-5,0);

if(0 != i){
    perror("fseek");
}
long pos;
pos = ftell(fp);
//指针距离开头的距离
printf("pos = %ld",pos); //7
//reason:按照文件读取,len=12,前移5,key=7

//把str清空
memset(str,0,sizeof(str));//置为0

//读
fread(str,sizeof(char),sizeof(str),fp);
printf("str=%s",str);//world

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blue_blooded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值