文件:有限的信息的集合。是计算机的信息存储单位
文件的操作步骤:通过如下API将信息写入到文件中(外存中),将文件中的信息读取到电脑中
1、打开:FILE* fopen(char* path,"操作方式")
只读打开:r rb read binary
如果文件路径不存在,则打开失败
只写打开:w wb write binary
如果文件不存在,则重新创建。否则截断为0打开
可读可写:w+ r+ wb+ rb+
都是读写打开,但是打开成功与否与上面一致。
以追加读写打开:a+ append
typedef struct
{
...
}FILE;
2、操作:读/写
3、关闭:fclose
注:fopen打开成功返回文件的指针,不存在的话返回NULL;
-
“r”.为读而打开文本文件.(不存在则出错)
-
“w”.为写而打开文本文件.(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖)
-
“a”.为在文件后面添加数据而打开文本文件.(若不存在,则新建;反之,在原文件后追加)
-
“r+”.为读和写而打开文本文件.(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)
-
“wb”.为写而打开二进制文件.
-
“rb”.为读而打开二进制文件
-
“ab”.为在文件后面添加数据而打开一个二进制文件.
-
“rb+”.为读和写而打开二进制文件.只是在随后的读写时,可以由位置函数设置读和写的起始位置.
-
“w+”.首先建立一个新文件,进行写操作,随后可以从头开始读.(若文件存在,原内容将全部消失)
-
“a+”.功能与”a”相同;只是在文件尾部添加新的数据后,可以从头开始读.
-
“wb+”.功能与”w+”同.只是在随后的读写时,可以由位置函数设置读和写的起始位置.
-
“ab+”.功能与”a+”相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置.
文件的读写位置:每操作一块位置,文件的读写位置就向后偏移该长度
long ftell(FILE*);
修改文件的位置:
int fseek(FILE*,offset,whence);
whence: 开始SEEK_SET 当前:SEEK_CUR 末尾:SEEK_END
offset:偏移量 -n向左 +n向右
文件的类型:
1、文本类型 :文件以”ASCII码“个”字符“依次存放
例如:int a=123456; (a占4Byte)通过文本函数将a写入到文件中,文本是占6Byte
int b=123; (b占4Byte)通过文本函数将b写入到文件中,文本是占3Byte
优点:数据直观表达
API:
写:
写一个字符: fputc
写一串信息:fputs
格式化写入:fprintf;
读:
fgetc()
fgets() 读取一行
fscanf();
feof();//判断文件是否到末尾了,到了则返回非0
2、二进制类型:以数据的原型存放(二进制)
硬盘里面怎么存放的,他就直接复制一份过来存放,
优点:好进行操作,但不能阅读。
共同点:存放在硬盘中都是二进制
不同点:文本文件是将每个显示字符以ASCII直接存放,而二进制是以原型存放。
fwrite(void* buf,size,memb,FILE*fp);写入size长*memb次的信息buf到文件中
返回值:写入的次数
fread(void* buf,size,memb,FILE*fp);从文件中读取size长*memb次 的长度的信息存入到buf中
返回值:读取的次数
注: 这里的void* buf不一定是一个数组,这里只是需要一个地址,比如在之
前int i; 则这里需要&i 。
练习:
1、如下文本文档
用户名 密码
。。。 。。。
。。。 。。。
1.密码用户与密码是否正确。
2、做一个copy拷贝
copy 源文件 目的位置
3、在student s[5]={…}
1、以二进制存放stu.data
2、查找178以上身高有多少人
3、查找cyj,并修改信息
拓展:
1、将stu.data的信息,按身高从小到大排序(文件中)