如何搞定C语言的文件操作

在平常学习中,有个很头疼的问题,就是每次程序运行时计算出的数据,在程序结束后也消失了,那如何才能将数据存储起来,通常企业里会使用数据库来实现,但今天我来介绍一种更简单易懂的方法,将数据放在磁盘文件里 《文件操作》

  • 什么是文件

 文件有程序文件 和数据文件两种 

一般后缀为 .c   .h    .obj    .exe  这种就是程序文件

而程序运行时读写的数据 而生成的文件 就是数据文件

而本文主要讨论的是 《数据文件》

  • 文件名

下面我们先认识下 什么是文件名 文件名的格式

c:\code\test.txt

文件路径 (c:\code\) 文件名主干(test)  文件后缀(txt)

  • 文件的打开和关闭

在C语言中,对文件操作之前 是需要对文件打开和关闭的

打开文件                                               读写文件                                                             关闭文件 

在学习打开关闭文件之前   我们得先知道 文件指针的概念

在C语言中 打开文件后 会在内存中创建一个结构体变量 FILE f 

这种结构体里有着 文件名;文件状态....等等文件信息 所以这个结构体又称文件信息区

所以如果我们想操作这个文件 就必须使用 文件指针 FILE*pf  

那如何打开 关闭文件呢?我们会使用到这两个函数

规定        fopen函数 打开文件

                fclose函数 关闭文件  

filename 文件名         mode 文件打开方式

"r" read        "w" write        "a" append  (追加)      "r+" read/update

"w+"             "a+"                "rb"  (二进制)           "wb" 

下面我们来操作一下 如何打开关闭文件

//打开文件

    FILE* pf = fopen("test.txt","w");
    // 可能会打开失败 会返回一个空指针
    if(NULL == pf)
    {
        perror("fopen");
        return 1;
        
    }


//使用



//关闭文件
    fclose(pf);
    pf = NULL;

现在我们学会了如何打开 关闭文件 那如何操作使用文件呢? 

操作使用文件又称 读写文件 而读写文件有着两种方式

1.顺序读写

2.随机读写 

  • 文件的顺序读写 

我们会使用到这些函数

fgetc        fgets        fscanf        fread        输入函数

fputc        fputs        fprintf        fwrite        输出函数

有人可能问了 什么是所有输入流? 所以输出流? 

先拿我们最为熟悉的 printf scanf 函数入手

printf 函数  

内存 ——> 屏幕 (输出)

scanf函数

键盘 ——> 内存 (输入)

说明这里的 “入” “出”是相对于 内存的

而键盘 屏幕是什么呢  是标准输入输出流(stdin/stdout)

由此可见 内存的对象  既是所有输入输出流 可以是文件 外部设备 网络等等

fputc函数  

内存 ——> 文件 (输出)

fgetc函数

文件 ——> 内存 (输入)

fputs函数  

内存 ——> 文件 (输出)

fgets函数

文件 ——> 内存 (输入)

而 fprintf 格式化输入函数 可以这样写  

fprintf(stdin,...) 等价于 printf 

  题外话

sprintf(是把格式化的数据写到字符串中)

sscanf(是从字符串读取格式化的数据)

  • 文件的随机读写 

我们会用到 这些函数

fseek 函数

ftell 函数

rewind 函数

 fseek

可以根据偏移量 来移动文件指针 

ftell

rewind         让文件指针的位置回到文件的起始位置

  • 文本文件和二进制文件 

在日常生活中我们经常发现 有的文本文件里是 我们看得懂的 文字 而有的文件里是写着 乱七八糟的 乱码 这就是文本文件和二进制文件

数据在内存中以二进制的形式存储 ——> 如果不加转化输出到外存 ——> 即是 二进制文件

数据在内存中以二进制的形式存储 ——> 转化成对应ASCII码的形式存储 ——> 即是 文本文件

千万别根据文件后缀 或其他东西来判断文件是文本文件还是 二进制文件

唯一标准 以内容来确定文件是什么类型文件 文本还是二进制 

  • 文件读取结束的判定 

切记 feof(); 函数 并非是 对文件读取结束判定的函数 

而是 文件读取结束时 判断时读取失败结束,还是文件末尾结束

EOF end of file 被错误使用的feof

《不能用feof函数的返回值 直接用来判断文件是否结束》

fgetc函数 如果读取正常 会返回读取到字符的ASCII值

                  如果读取失败 返回EOF

fgets函数 如果读取正常 会返回读取到字符串的地址

                  如果读取失败 返回空指针NULL

fscanf函数 如果读取正常 会返回格式串中指定的数据的个数

                  如果读取失败 返回的是小于格式串中指定的数据的个数

fread函数 如果读取正常 会返回是实际要读的个数

                  如果读取失败 返回小于实际要读的个数

  • 文件缓冲区

在ANSIC (标准C)中规定 存在一种“缓冲文件系统”

内存每次呈递数据给硬盘 由操作系统OS来实现 一个一个来给 太低效了 于是出现缓冲区 等缓冲区符合上交条件 再一次性提交到硬盘或内存

因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件

总结

以上就是文件操作的所有内容了 你的点赞是我创作的动力 感谢你的观看

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值