文件的概述:
文件通常是字磁盘或固态硬盘上的一段已命名的存储区。对我们而言,stdio.h就是一个文件的名称,该文件中包含一些有用的信息。然而,对os来说,文件更加复杂。
c把文件看做是一系列连续的字节,每个字节都能被单独读取,至于UNIX环境中的文件结构相对应
由于其他环境可能无法完全对应这个模型,C提供两种文件模式:文本模式和二进制模式。
标准文件
1.标准输入
2.标准输出
3.标准错误输出
标准输入是系统的普通输入设备,通常为键盘;标准输出和标准错误输出是系统的葡萄输入设备,通常为显示屏。
fopen()函数
fopen 函数可以打开一个文件,返回文件所在的地址,还创建了一个缓冲区以及包含文件和缓冲区数据的结构。
我们说fopen打开一个流。如果以文本模式打开该文件,就获得了一个文本流,二进制打开为二进制流。
fclose()函数
fclose函数关闭fp指定的文件,必要时刷新缓缓区对于较为正式的程序,应该检查是否关闭成功。关闭成功返回0,否则返回EOF
文件的输入与输出
ch=getc(fp);
getc用来从打开的文件中获取一个字符
putc用来从fp指定的文件中写入ch字符
putc(ch,fpout)fprintf(),fscanf()第一个参数为文件的指针,就是将指针所指向的内容输入输出到指针 fgets() fputs函数
fseek()函数,边可以把文件看做数组,在fopen()打开的文件中直接移动到任意字节处。
fseek函数有三个参数,返回int类型的值;ftell()函数返回一个long类型的值,表示文件中的当前位置。
fseek()函数
第一个参数为FILE指针,指向带查找的文件,fopen应该已经打开文件
第二个参数是偏移量(offsset)可以为正(前移),负(后移),0
第三个参数表示其实的模式,确定起始点。以下为三种:
SEEK_SE 文件开始处
SEEK_CUR 当前位置
SEEK_END 文件末尾
如:
fseek(fp,10L,SEEK_SET)//定位到文件开始处的第10个字节
fseek(fp,-10L,SEEK_END)//从文件结尾处绘图10个字节
//L后缀表面其值为long
如果一切正常,fseek()返回0,错误返回-1
ftell()函数,返回类型为long ,他返回的是当前的位置。其他函数 ANSI标准库中的标准I/0系列函数有几十个。 按块去写入和读入
char buffer[256];
fwrite(buffer,256,1,fp);
把一块256字节的数据从buffer写入文件。fp指定待写入的文件。
再如:
double earnings[10];
fwrite(earnings,sizeof(double),10,fp);
表示把earnings数组中的数据写入文件,数据被分成10块,每块都是double的大小。 fread()函数 double
earnings[10]; fread(earnings,sizeof(double),10,fp);
把10个double大小的值拷贝到earnings数组中。
更新缓冲区
#include <stdio.h>
int fflush(FILE *stream);
功能:更新缓冲区,让缓冲区的数据立马写到文件中。
参数:
stream:文件指针
返回值:
成功:0
失败:-1
删除文件、重命名文件名
#include <stdio.h>
int remove(const char *pathname);
功能:删除文件
参数:
pathname:文件名
返回值:
成功:0
失败:-1
#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
功能:把oldpath的文件名改为newpath
参数:
oldpath:旧文件名
newpath:新文件名
返回值:
成功:0
失败: - 1