当前位置: 首页 > news >正文

C语言的文件操作

将写的程序写入到文件当中,将文件中的代码导入到软件当中,内存和磁盘中的文件进行交互。

文件和流的介绍

文件最主要的作用就是 保存数据 ,它既可以保存一张图片,也可以保持视频,声音...。

C程序中,对于文件中数据的输入/输出操作以(stream) 的方式进行,可以看做是一种数据的流动。

输入流:从数据源(比如:文件)到程序(或内存)的流动过程;

输出流:从程序(或内存)到数据源(比如:文件)的流动过程。

C输入和输出

输入的来源:键盘。文件,或从网络中。

输出的目的地:屏幕上,打印机上或任意文件中显示或保存一些数据。

  • 标准的文件I/O

标准文件文件指针设备
标准输入
stdin
键盘
标准输出
stdout
屏幕
标准错误
stdout
屏幕

scanf和printf函数 、getchar和putchar函数 、gets和puts函数 在发布的第二篇C语言文章关于变量的文件中详细说到。

C文件的读写

首先声明文件路径:

举例:char * filePath = "C:\\Users\\86182\\Desktop\\hello.txt";

  • 创建/打开文件

FILE fopen( const char * filename  e , const char * mode);

filename是字符串,用来命名文件;访问模式 mode 的值可以是下列值中的一个。

mode1
模式描述
r
只读 。打开一个已有的文本文件,只允许读取。
w
只写 。打开一个文本文件,只允许写入文件。如果文件 不存在,则会创建一个新文件,
并从文件的开头写入内容。如果文件存在,则截断文件为 零长度,从开始写入!
a
追加 。打开一个文本文件,用于写入。如果文件不存 在,则创建一个新文件。
如果文件已存在,则将写入的数据追加到文件末尾。
rb
只读(二进制) 。打开一个二进制文件,只允许读取
wb
只写(二进制) 。打开一个二进制文件,只允许写入。 如果文件不存在,则创建一个
新文件。如果文件已存在,则截断文件为零长度,从开始写入!
ab
追加(二进制) 。打开一个二进制文件,用于写入。如果文件不存在,则创建一个新文件。如果文件已存在,则将写入的数据追加到文件末尾。
mode2
模式描述
r+
读写 。打开一个文本文件,允许读取和写入。
w+
读写 。打开一个文本文件,允许读取和写入。如果文件不存在,则创建一个新文件。
如果文件已存在,则截断文件为零长度,从开始写入!
a+
读写 。打开一个文本文件,允许读取和写入。如果文件不存在,则创建一个新文件。
如果文件已存在,则将写入的数据追加到文件末尾。
rb+
"rb+" 读写(二进制) 。打开一个二进制文件,允许读取和写入。
wb+
"wb+" 读写(二进制) 。打开一个二进制文件,允许读取和写入。如果文件
不存在,则创建一个新文件。如果文件已存在,则截断文件为零长度。
ab+
"ab+" 读写(二进制) 。打开一个二进制文件,允许读取和写入。如果文件
不存在,则创建一个新文件。如果文件已存在,则将写入的数据追加到文件末尾。
  •  关闭文件

int fclose( FILE *fp );

 说明:

  • 如果成功关闭文件,fclose( ) 函数返回零。此时,会 清空缓冲区中的数据 ,关闭文件,并释放用于该文件的所有内存。
  • 如果关闭文件时发生错误,函数返回 EOFEOF 是一个定义在头文件 stdio.h 中的常量。
  •   写入文件

方式1:fprintf函数

int  fprintf(FILE *fp,const char *  format, ...);

方式2:fputs函数 

int fputs( const char  *,  FILE *fp );

举例: 

#include <stdio.h>
int main() {//创建一个文件指针FILE *fp = NULL;//打开该文件fp = fopen("d:/hello.txt", "w+"); //w+模式是:如果文件已存在,则截断文件为零长度。//fp = fopen("d:/hello.txt", "a+"); //a+模式是:如果文件已存在,则将写入的数据追加到文件末尾。//将内容写入到文件中fputs("你好,北京!!\n", fp);fprintf(fp, "你好,世界!!\n");//关闭文件!如果不关闭 ,我们的内容没有保存到文件中!fclose(fp);printf("创建,写入信息完成");return 0;
}
  • 读取文件

其中声明文件路径、打开文件、关闭文件的操作和上面相同。因此这里只讲读取文件的方式。

方式1:fscanf函数

int  fscanf (FILE *fp , const char *format,  ... );

这种方式更适合:使用 fscanf() 函数从文件中读取格式化的数据,比如 整数、浮点数等各种类型的数据 format 参数指定了数据的格式,后面的参数是用于存储读取数据的变量。

注意:

  • 如果使用 fscanf( ) 函数从文件中 读取字符串 ,会在遇到第一个空白字符(空格、制表符、换行符等)时,停止读取,之后的内容会被忽略。
  • 它会返回 成功读取的参数个数 。或者在读取失败或文件结束时 返回 EOF 
  • 因此,这种方式不太适合对于字符串文本的读取。

方式2:fgets函数

先声明一个字符数组作为缓冲区:char* cBuff [10];

char * fgets( char *buf , int , FILE *fp );

说明:

  • 此函数按行读取数据,它从文件中 读取一行数据 (包括换行符'\n'),并将这一行的内容存储到指定的缓冲区中。参数中 buf 是用于存储读取的文本的缓冲区,n 是缓冲区的大小,fp 是文件指针。
  • 如果成功读取,返回参数 buf,即读取到的字符串的首地址。如果到达文件末尾或者读取失败,返回NULL

举例:

#include <stdio.h>
int main() {//创建一个文件指针FILE *fp = NULL;//定义一个缓冲区char buff[1024];//打开文件fp = fopen("d:/hell.txt", "r");//方法1//fscanf(fp, "%s", buff);//输出//printf("%s\n", buff);  //这种输出遇到‘\0’,就会停止输出。//方法2 读取整个文件//说明,循环读取fp指向的文件内容,如果读到NULL,就结束while (fgets(buff, 1024, fp) != NULL) {printf("%s", buff);}//关闭文件fclose(fp);return 0;
}

相关文章:

  • TMDOG——语言大模型进行意图分析驱动后端实践
  • 智能家居适老化改造:让科技回归“无感服务”
  • 2025 最新版 Node.js 下载安装及环境配置详细教程【保姆级】
  • [250416] GitHub Action 新升级,支持 Windows on Arm
  • FC-4 mapping映射协议VI、hippi、fhcp、scma表示啥意思
  • windows上安装Jenkins
  • 【含文档+PPT+源码】基于微信小程序健康管理之健身房管理系统的设计与实现
  • 【C++】 —— 笔试刷题day_18
  • MicroK8s和K8s的区别优劣在哪?
  • 网络请求——微信小程序学习笔记
  • 蓝桥杯常考排序
  • GPT-4.1 提示词使用指南
  • 贪心算法学习C++
  • 开源模型应用落地-Podcastfy-从文本到声音的智能跃迁-Gradio(一)
  • WordPiece 详解与示例
  • Codeforces Round 1017 (Div. 4)
  • Java的类加载机制和类对象
  • HTML5好看的水果蔬菜在线商城网站源码系列模板4
  • Spring Boot 自定义定时任务组件深度解析:Quartz 集成与设计模式实战
  • 设计模式之工厂模式(factory pattern):在商品对象创建系统中的应用
  • 成都市微信网站建设公司/千锋教育培训机构怎么样
  • 做公考题的网站/seo最新技巧
  • 怎样做好网站推广/职业技能培训网
  • 114网站做推广怎么样/竞价托管资讯
  • 白狐网站建设/网络营销seo培训
  • 深圳网站设计公司yx成都柚米科技15/传播易广告投放平台