【答疑释惑】标准C语言如何操作文件?
C语言中操作文件功能都用ANSI C提供的一组标准库函数来实现。文件操作标准库函数有如下:
fprintf:往文件中写格式化数据 fscanf:格式化读取文件中数据 fread: 以二进制形式读取文件中的数据 fwrite:以二进制形式写数据到文件中去 getw: 以二进制形式读取一个整数 putw: 以二进制形式存贮一个整数
fopen: 打开一个文件
fclose:关闭一个文件
fgetc: 从文件中读取一个字符 fputc: 写一个字符到文件中去 fgets: 从文件中读取一个字符串 fputs: 写一个字符串到文件中去
feof: 文件状态检查函数,文件结束 ferror: 文件读/写出错 clearerr: 清除文件错误标志 ftell: 了解文件指针的当前位置
rewind: 反向设置文件读写指针 fseek: 设置文件读写指针
这次先挑一些来写。
# 文件的打开
1.函数原型
FILE *fopen(char *pname,char *mode)
2.功能说明 按照mode 规定的方式,打开由pname指定的文件。若找不到由pname指定的相应文件,就按以下方式之一处理: (1) 此时如mode 规定按写方式打开文件,就按由pname指定的名字建立一个新文件; (2) 此时如mode 规定按读方式打开文件,就会产生一个错误。
打开文件的作用是: (1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量; (2)开辟一个缓冲区; (3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件; FILE *:指出fopen是一个返回文件类型的指针函数;
3.参数说明 pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。 mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式见表8.1
4.返回值 正常返回:被打开文件的文件指针。 异常返回:NULL,表示打开操作不成功。
例如:
//定义一个名叫fp文件指针
FILE *fp;
//判断按读方式打开一个名叫test的文件是否失败
if((fp=fopen("test","r")) == NULL)
{
printf("The file opened.n");
exit(1);//结束程序的执行
}
要说明的是:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等。ANSI C标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout和标准出错 stderr。
# 文件的关闭
1. 函数原型
int fclose(FILE *fp);
2. 功能说明 关闭由fp指出的文件。此时调用操作系统提供的文件关闭功能,关闭由fp->fd指出的文件;释放由fp指出的文件类型结构体变量;返回操作结果,即0或EOF。
3. 参数说明 fp:一个已打开文件的文件指针。
4. 返回值 正常返回:0。 异常返回:EOF,表示文件在关闭时发生错误。 例如:
int n=fclose(fp);
# 文件的读写操作
A. 从文件中读取一个字符
1. 函数原型
int fgetc(FILE *fp);
2. 功能说明 从fp所指文件中读取一个字符。
3. 参数说明 fp:这是个文件指针,它指出要从中读取字符的文件。
4. 返回值 正常返回: 返回读取字符的代码。 非正常返回:返回EOF。例如,要从"写打开"文件中读取一个字符时,会发生错误而返回一个EOF。
B. 写一个字符到文件中去
1. 函数原型
int fputc(int ch,FILE *fp)
2. 功能说明 把ch中的字符写入由fp指出的文件中去。
3. 参数说明 ch:是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。 fp:这是个文件指针,指出要在其中写入字符的文件。
4. 返回值 正常返回: 要写入字符的代码。 非正常返回:返回EOF。例如,要往"读打开"文件中写一个字符时,会发生错误而返回一个EOF。
B. 写一个字符到文件中去
1. 函数原型
int fputc(int ch,FILE *fp)
2. 功能说明 把ch中的字符写入由fp指出的文件中去。
3. 参数说明 ch:是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。 fp:这是个文件指针,指出要在其中写入字符的文件。
4. 返回值 正常返回: 要写入字符的代码。 非正常返回:返回EOF。例如,要往"读打开"文件中写一个字符时,会发生错误而返回一个EOF。
参考:http://www.cnblogs.com/likebeta/archive/2012/06/16/2551780.html
- Enumerable#Zip 实现一下
- 更新自己,不要影响其他人
- 【译】Spring官方教程:Spring Boot整合消息中间件RabbitMQ
- [实录]解决Migrator.Net 小bug
- Jenkins Pipeline插件十大最佳实践!
- Spring Cloud Hystrix的请求合并
- JQuery JCshare 0.1 分享插件
- Java中的即时编译(Just-in-time compilation)
- 无尽的忙碌换来幸福的日子
- 消费者驱动的微服务契约测试套件:Spring Cloud Contract
- 自己做的一个小程序 可采集、导出、模板、配置
- 分布式消息队列 RocketMQ 源码分析 —— Message 拉取与消费(上)
- .NET反射、委托技术与设计模式
- 我最常用的Intellij IDEA快捷键
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP调用微博接口实现微博登录的方法示例
- Python使用pyexecjs代码案例解析
- PHP抽象类与接口的区别实例详解
- laravel获取不到session的三种解决办法【推荐】
- php封装的pdo数据库操作工具类与用法示例
- 利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
- PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
- Python基于正则表达式实现计算器功能
- python利用os模块编写文件复制功能——copy()函数用法
- 解决python 虚拟环境删除包无法加载的问题
- Laravel框架路由管理简单示例
- php + WebUploader实现图片批量上传功能
- php查询内存信息操作示例
- ThinkPHP3.2框架操作Redis的方法分析
- python实现图像外边界跟踪操作