第8课-库函数方式文件编程
1.基于C函数库的程序是独立于操作系统的,可移植性更好。基于系统调用的编程依赖于内核,移植性不好。
2.流:在程序和源文件之间会建立一个数据通道访问文件里的数据,于是通道里的数据就成了抽象动态的流。
文件指针:对应于系统调用的文件描述符(整数)。是FILE类型的指针,通常是定义一个FILE* fp的变量描述一个指向文件的指针,FILE类型里包含了管理流信息的数据信息。
3.函数学习:
3.1 打开文件
Fopen(文件指针默认指向文件头)
3.1.2 函数原形
FILE *(const char *path, const char *mode);
3.1.3 函数功能fopen
从指定的路径按照指定的模式打开一个文件
3.1.4 所属头文件
<stdio.h>
3.1.5 返回值
成功:返回文件指针
失败:NULL
3.1.6 参数说明
Path:文件名(含路径)
Mode:打开文件的方式(两个参数都是字符串)
(1)r,rb-----------只读
(2)w,wb----------只写
(3)a,ab----------追加,若不存在则创建
(4)r+,r+b,rb+----读写
(5)w+,w+b,wb+---读写,若不存在则创建,存在则清空内容
(6)a+,a+b,ab+----读和追加,若不存在则创建
3.2 关闭文件
3.2.1 函数名
Fclose
3.2.2 函数原形
int fclose(FILE *fp);
3.2.3 函数功能
关闭文件
3.2.4 所属头文件
<stdio.h>
3.2.5 返回值
成功:返回0
失败:EOF
3.2.6 参数说明
Fp:待关闭文件的文件指针
3.3 读文件
3.3.1 函数名
Fread
3.3.2 函数原形
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
3.3.3 函数功能
从文件中读取数据
3.3.4 所属头文件
<stdio.h>
3.3.5 返回值
成功:返回读取到的数据量(字节数)
失败:0
3.3.6 参数说明
Ptr:指向要保存数据的位置
Size:决定每一块的字节数
Nmemb:决定要读取的数据块数
Stream:指向要读取的文件
3.4 写文件3.4.1 函数名
Fwrite3.4.2 函数原形
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);3.4.3 函数功能
向一个文件中写入事先存放在指定位置的数据3.4.4 所属头文件
<stdio.h>3.4.5 返回值
成功:返回成功写入的字节数失败:0
3.4.6 参数说明
Ptr:指向要写入数据的位置Size:决定每一块的字节数
Nmemb:决定要写入的数据块数Stream:指向要写入的文件
3.5 定位文件3.5.1 函数名Fseek
3.5.2 函数原形int fseek(FILE *stream, long offset, int whence);
3.5.3 函数功能设置文件的位置指针(隐形指针)
3.5.4 所属头文件<stdio.h>
3.5.5 返回值成功:返回0失败:-1
3.5.6 参数说明Stream:指向要移动位置指针的文件Offset:移动的距离(字节数)Whence:决定指针以什么位置为基准开始移动SEEK_SET:以文件头为基准,此时的offset只能是整数SEEK_CUR: 以当前位置为基准,此时的offset可正可负,正数往后移动,负数往前移动。SEEK_END:以文件尾为基准移动,此时的offset之能是负数。
3.6 int fgetc(FILE* fp)从指定文件读取一个字符,当读取到结束符的时候返回EOF
3.7 int fputc(int count,FILE* fp)向指定文件写入一个字符 (将c转化为unsigned char类型写入)
3.8 fscanf(FILE* fp,char* format[,argument])从一个流中进行格式化输入(格式化读)
3.9fprintf(FILE* fp,char* format[,argument])格式化输出到一个流(格式化写)
3.10 char* getcwd(char* buf,size_t size)获取当前路径,将其存放在buf,如果buf太小,返回-1
3.11 int mkdir(char* buf,int mode)
创建路径,成功返回0,失败返回-1