读写文件操作与普通的printf、scanf

代码操作平台功能
printf 屏幕 标准输出
scanf 键盘 标准输入
perror 屏幕 标准输出错误

系统文件

功能代码宏定义
标准输入 stdin 0
标准输出 stdout 1
标准错误 stderr 2

系统文件在应用程序执行时会自动打开,结束时系统自动关闭(隐式回收)

 

文件指针和普通指针的相同和区别:

定义方式:

采用了系统特定的结构体FILE来处理。

FILE *fp = NULL;

操作文件方式:

开辟指针

借助文件操作函数来改变fp为空和野指针。

fopen();
//函数相当于C里面的malloc函数来开辟空间

操作文件:

使用文件读写来完成

fput,fputs,fgetc,fgets,fread,fwrite函数等

文件分类:

设备文件:

屏幕,显卡,键盘,磁盘等

磁盘文件:

文本文件:

由ASCII码写成

二进制文件:

由bin二进制编码完成

文件操作的一般步骤:

  1. 打开文件 fopen()函数

  2. 读写文件:fputc,fputs等函数

  3. 关闭文件:fclose()函数

打开、关闭文件函数

//fopen函数原型
FILE *fopen(const char *filename,const char *mode);

参数1 const char *filename的filename

表示的是文件访问路径,可以是绝对路径也可以是相对路径

参数2 const char* mode

文件打开权限

 

参数操作
r 只读方式打开文件,不存在则报错
w 只写方式打开文件,如果文件存在就直接覆盖文件重新写,如果不存在则创建文件再写
w+ 写、读方式打开文件,如果文件存在则覆盖文件重新写,如果不存在就创建文件再写
r+ 读、写方式打开文件,如果文件不存在则失败
a 以再文件以后的内容后面追加来打开文件
b 以二进制形式打开文件

可以复合则使用如(ab)

fopen函数打开成功则返回文件的文件指针,失败则返回NULL

 

文件访问路径:

绝对路径:

从磁盘的根目录开始描写 如:C:/User/test.txt

书写方法:

情况书写方法
Windows下特有 C:\\user\\test.txt
Windows和linux通用 C:/User/test.txt

 

相对路径:

针对于启动项的环境。

如果是使用xxx.exe来执行,就是相对于xxx.exe的文件路径

如果是用VS环境下,就值在.vcxproj所在目录的文件路径

 

具体操作函数:

文件结束标记:

也就是会返回一个EOF,在宏定义上EOF也就是-1的意思,可以通过fp和EOF来判断文件是否读取到结束。

 

按字符写文件fputc:

//函数原型
int fgetc(FILE *stream)
参数

FILE *stream

stream也就是带读取的文件的fp(指针)

返回值

成功:就是读到对应字符的ASCII码

失败:返回-1

实现demo:

https://www.cnblogs.com/beautiful7/p/13915853.html

 

feof()函数

//函数原型
int feof(FILE *stream);
参数:

FILE *stream

返回值:

 

返回条件返回值
到达文件末尾 真(非0值)
没有到达文件末尾 假(0值)
作用:

用来判断是否到达文件末尾,对于二进制文件和字符文件都OK

特征:

调用feof函数来判断,必须使用正确的调用指针来处理。

fgets()函数

作用:

获取一个字符串,用\n来作为结尾标记,自动在最后添加'\0',如果空间够大就会把\n也读入,如果不够就舍弃\n,但是\0必有

//函数原型
char *fgets(char *str,int size,FILE *stream);
参数:

 

参数作用
char *str 表示需要提取到的字符串首地址
int size 表示需要提取的空间大小
FILE *stream 表示文件指针
返回值:

成功:返回读取到的字符串

失败:返回NULL

实现demo:

https://www.cnblogs.com/beautiful7/p/13915880.html

fputs()函数

功能:

写入一个字符串,如果字符串中没有\n就不会写\n

//函数原型
int fputs(const char *str,FILE *stream);
参数
参数 
const char *str 字符串首地址
FILE *stream 文件指针