目录
C语言-文件操作
概念:文件是数据的集合,数据集的名称就是文件名。
分类:从用户角度看,Linux系统文件分为设备文件和普通文件
文本文件和二进制文件
1.文本文件
文本文件也叫作字符文件和ASCII文件,每个ASCII值占一个字节,表示一个字符。
2.二进制文件
把数据对应的二进制存储到文件中,是字节序列文件。
存储格式对比:
存储数据123
字符
‘1’
‘2’
‘3’
ASCII(十进制)
49
50
51
ASCII(二进制)
00110001
00110010
00110011
不同的二进制文件需要采用相应的软件打开它,
例如:图片文件需要用图片查看软件,音频文件需要用音乐播放器等。
小区别
文本文件可以换行,例如我们写的C语言程序,就是文本文件,有换行。
二进制文件是数据流,没有换行,没有字符串,也没有空字符结尾的说法。
打开文件与关闭
C语言操作文件,必须先“打开”文件,操作完成后,需要“关闭”文件。
1.文件指针
C语言打开文件时,会为该文件分配一个文件信息区,该信息区包含文件描述信息、缓冲区大小以及缓冲区位置等基本信息,
并将其保存在结构体变量struct _IO_FILE中,别名:FILE(typedef struct _IO_FILE FILE),头文件:stdio.h。
调用函数fopen打开文件时系统会自动分配一个FILE结构体,并把FILE结构体地址作为函数的返回值,即文件指针。
调用关闭文件fclose的时候,除了关闭文件,还会释放文件占用的内存。
2.打开文件
C语言通过库函数fopen来创建或打开文件,调用fopen函数成功后,返回一个文件指针(FILE).
函数声明:
FILE *fopen(const char *filename, const char *mode);
参数介绍:
filename:文件名或包含目录名。
mode:打开方式。
实际开发:文件采用全路径,即包含目录名。
mode:表示文件打开模式
‘rb’按照二进制位进行读取。
‘rt’按照二进制读取文本文件。
模式
含义
说明
r
只读
文件必须存在,否则打开失败。
w
只写
如果文件存在,则清除原文件内容;
如果文件不存在,则创建文件。
a
追加
只写
如果文件存在,则打开文件;
如果文件不存在,则创建文件。
r+
读写
文件必须存在,在只读r的基础上+可写功能。
w+
读写
在只写w的模式上增加可读的功能。
a+
读写
在追加只写a的模式上追加可读的功能。
用法:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int main() { FILE *fp = 0; // 定义文件指针变量 //以只读的方式打开文件 if ((fp = fopen("C:/Users/Administrator/Desktop/学习笔记/图片.jdp", "r")) == 0) { printf("打开文件%s失败。\n","aaa.txt"); } printf("%p\n",fp); //关闭文件 if (fp != 0) fclose(fp); return 0; }
3.注意事项
1)用fopen打开文件时,一定要判断返回值。
文件打开失败原因:文件不存在、没有权限、磁盘空间满了,都有可能造成打开文件失败。
2)文件指针调用fopen函数,系统动态分配内存,文件操作完成,必须调用fclose关闭文件指针,释放内存,否则会出现后果严重。
3)如果文件指针为空,用fclose关闭它相当操作空指针,后果严重。
谢谢阅读,欢迎指正!