C语言文件保存

文件操作
为了保存数据,比如做的通讯录,当程序退出时,所录入的数据就会销毁。
文件功能分两种:
程序文件和功能文件
.h .c .obj .exe都是程序文件
txt是数据文件,数据的输入输出都是数据文件
文件名(文件标识):
包含三部分:文件路径+文件名主干+文件后缀
文件名可以没有后缀
文件的打开和关闭:
每打开一个文件时就会有一个文件信息区,这个文件信息区本质上是结构体,这个结构体被自定义为FILE。
文件打开后要关闭
打开文件函数:
fopen-返回文件信息区的地址
FILE *fopen(const char *filename,const char *mode)
                               文件名                打开方式(r,w,r+...),都是指针类型所以传递的应该是字符串
fopen打开失败返回一个空指针
关闭文件:
 int flose(FILE *stream);参数是指向文件的指针
为了防止关闭文件后,指向原来文件的指针变成野指针,因此需要将NULL赋值给文件指针
eg: int flose(p); *p=NULL
文件路径;
相对路径:
.表示当前路径,前面什么也没有默认为当级路径 
..表示上一级路径,最后都加上\\
..\\是可以叠加的。eg:..\\..\\disdj.txt
绝对路径:
完整的路径
文件的顺序读写:
字符输入输出函数:fgetc;fputc
文本行输入输出函数:fgets;fputs
格式化输入输出函数:fscanf;fprintf
二进制输入输出:fread;fwrite
fputc(int character,FILE *strem);前面写入需要输入的内容后面写指向文件的指针
eg:fputc('ab' , ps)
     fputc('cd' , ps);除指向文件的指针ps外,指针内部有一个指针标识,当输入ab后,文件内部指针移动到下一位才能成功数入cd,相当于光标
流:
是系统从内存写入电脑硬件中的一种操作过程。
stdout标准输出流
stdib标准输入流,这两个流都是直接与屏幕相连,类型也是FLIE *;
eg:fputc('abcd',stdout),那么就不会·存入文件而是直接在程序窗口打印
fgetc(),fgetc的参数是文件指针,每次读一个字符,当读取失败的时候返回一个EOF
接收fgetc的变量类型可以是int(字符的ASCAII值)
fputs(const a,FLIE *p b)
a可以是字符串,数组等,第二个参数是文件指针
fputs("hello",p);fputs("world",p)hello world不会分行,要想分行要加\n
fgets(char *str,int num,FILE * stream)
num指fgets读取的个数,实际上只读取num-1个,第一个参数是指将所读数据所存放的地址,并且fgtes遇到\n也会自动停止读入,读取失败返回NULL,读取成功返回储存数据的缓存地址
fprintf(FILE *p,a,b,c)
a,b,c指需要存储到文件里的变量名
例如要将名为s的结构体存入文件当中格式如下:
fprintf(pf,"%f-%c-%d",s.f,s.c,s.n);%f和%c之间是空格那么存入文件之中数据之间便是空格,若前者是-那么文件中数据之间就是-;
fscanf()
fscanf的第一个参数是文件名,第二个参数是依次读取数据的类型,两数据直接是空格还是-也要保持一致,第三个参数就是将读取数据存储到的变量地址
fscanf(pf,"%f-%c-%d",&(s.f),&(s.c),&(s.n))
fwrite(void *p)
第一个参数指需要写入的变量地址,第二个参数是指每一个元素的大小,第三个参数是指变量的多少,第四个参数是指文件指针
eg:arr[10]={0}
fwrite(arr,sizeof(arr[0]),sizeof(arr)/sizeof(arr[0]),pf);
fread()
fread()的参数和fwrite相同
sprintf()
第一个参数是所存字符串的变量地址,第二个是所存格式,第三个即变量名
把格式化数据转化为字符串,并存储到指针所指位置
eg:fprintf(arr,"%f-%c-%d",s.f,s.c,s.n),即将后面的变量转化为字符串存入arr
sscanf()
与sprintf参数类型相同
fscanf(arr,"%f-%c-%d",&(tem.f),&(tem.c),&(tem.n))即将arr的数据依次读取存入tem.c等中

比较函数
scanf/fscanf/sscanf
printf/fprintf/sprintf
scanf(printf)是格式化的输入(输出)函数,针对标准输入流(输出),即键盘(屏幕)
fscanf(fprintf)是针对所有输入(出)流,包括文件流,标准流等,的格式化输入(出)函数;
sscanf(sprintf)是将字符串转成格式化数据/将格式化的数据转成字符串
文件的随机读写
fseek
根据文件指针的位置和偏移量来定位指针
int fseek(FILE *stream,long int offset,int origin)
fseek(pf,-4,SEEK_CUR)指当前文件的光标位置再向左移动四个位置。SEEK_SER指光标移动到文件起始位置,SEEK_END指让光标到文件末尾
ftell
返回文件指针(光标)相对于起始位置的偏移量,返回int
rewind
让文件指针返回到文件的起始位置
文本文件和二进制文件:
根据数据的组织形式,数据文件被称为文本文件或二进制文件。以ASCAII码值形式存出就是文本文件
eg:10000
文本文件存储:
把每一位当成ASCII码值
00110001   00110000  00110000 00110000  00110000
      1                 0                    0           0               0


 

你可能感兴趣的:(java,服务器,前端)