一.文件的当前位置指针
文件结构类型FILE
其中FILE(结构体)包含
char *_ptr;
ptr表示当前的位置指针,指向当前的读写位置
二.跟踪文件的当前位置指针
ftell函数
long ftell(FILE *filepointer);
如果操作成功,返回filepointer文件地当前位置指针,即相对于文件开头的位移量(字节数)
否则返回-1L
feof函数
int feof(FILE *filepointer)
测试filepointer文件地位置指针是否指向文件的末尾
如果filepointer文件的位置指针已指向文件的末尾,则返回逻辑真,否则返回逻辑假
三.定位文件的当前位置指针
rewind函数
void rewind(FILE *filepointer)
rewind函数将filepointer文件的当前位置指针强行定位到文件的开头
fseek函数
int fseek(FILE *filepointer, long offest, int origin)
//filepointer是文件指针
/**
*offset是偏移量,类型为long int
文件开头------SEEK_SET--0
文件当前位置---SEEK_CUR--1
文件末尾------SEEK_END--2
//origin是起始位置,类型为int
fseek将filepointer文件的当前位置指针移动到距离origin的offset位置处
offset>0,表示新位置在origin后,反之亦然
若操作成功则返回0,否则返回非0
四.文件的打开与关闭
fopen()函数
FILE * fopen(char *filename, char *mode);
//filename是要打开的文件名,文件名前可以带路径
//mode是打开方式
如果文件打开成功,则返回指向该文件的指针
如果文件打开失败,则返回空指针NULL
e.g.
FILE *fp;
fp = fopen("f1.txt","r");//推荐写法
//r:文件一定要已存在
fp = fopen("c:\\aaa\\f1.txt", "w+");//不推荐写法
//w+:若文件不存在则创建文件,可读可写
char filename[] = "file\\f1.txt";
//存储到当前目录的file子目录下
fp = open(filename, "a+");
//a+:若文件不存在则创建文件,可读可写
fclose()函数
int fclose(FILE *filepointer);
如果正常关闭,返回0,否则返回非0
五.文件读写
fgetc函数—-字符方式文件读写
int fgetc(FILE *filepointer);
fgetc从filepointer文件的当前位置读出一个字符,同时将文件的位置指针_ptr后移一个字节。读出的字节一般要保存到一个字符型变量中
如果读取成功,返回读取的字节值;
如果读到文件尾或出错,返回EOF
fgets函数—-字符串方式文件读写
char *fgets(char *str, int n, FILE *filepointer);
//*str是读出的字符串要存放的地方
//n:读取长度为n-1,在末尾加上'\0'
读取成功,返回指向字符串的指针
失败或出错,返回NULL
fprintf函数和fscanf函数—-格式化读取
int fscanf(FILE *filepointer,char *format[,adress,...]);
int fprintf(FILE *filepointer,char *format[,adress,...]);
e.g.
int x;
char *str;
fscanf(fp,"%d%s",&x,str);//从文件中读取
int y;
float y =5.8;
fprintf(fp,"%d,%6.2f",x,y);//写入文件中
失败返回EOF
fwrite函数和fread函数—-二进制方式文件读写
unsigned fwrite(void *ptr,unsigned size, unsigned n, FILE *filepointer);
//ptr:数据存储位置
//size:数据所占字节数
//n:写入n个数据
//filepointer:向这个文件写
fread同理