1.什么是文件
文件通常是在磁盘或固定硬盘上的一段已命名存储区
文件内容有文本文件,和二进制文件,文本文件是直接将字符串写入文件或从文件中读取字符串,二进制是以二进制模式写入文件,并以二进制模式读取文件
12345通过文本哦是写入就是字符串12345,通过二进制写入就是12345的二进制
在程序设计中,一般谈的文件分为程序文件和数据文件
2.文件操作函数
FILE *
是一个文件指针,FILE是一个结构体类型,包含了文件的一些信息,通过文件指针可以找到文件的地址,对文件进行操作
1.FILE * fopen(文件名, 打开方式)
fopen()函数第一个参数为要打开的文件名,第二个参数为以什么格式打开文件,是一个字符串,打开失败会返回空指针
"r"
以读打开
"w"
以写的方式打开,把现有文件清空,若没有该文件,则创建文件
"a"
以写的模式打开,在现有文件后面追加内容,若没有该文件,则创建文件
"r+"
以更新模式打开文件(可以读写文件)
"w+"
以更新模式打开文件,文件存在则将其清空,不存在就创建一个
"a+"
以更新模式打开,在现有文件末尾添加内容,文件不存在则新建一个,可以读整个文件
"rb"、"wb"、"ab"、"rb+"、"r+b"、"wb+"、"w+b"、"ab+"、"a+b"
与上一个类似,二进制模式打开
"wx"、“wbx”、"w+x"、"wb+x"、"w+bx"
类似非X模式,但是如果文件存在或以独占模式打开文件,则打开文件失败
2.char getc(FILE *)
从文件中读取一个字符
3.putc(char, FILE */stdout)
将字符输出到文件中或标准输出
4.fclose(FILE *)
关闭文件
5.fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
第一个参数为文件指针,后面两个参数和printf()函数完全相同,将后面的内容以一定格式输出到文件中
FILE *fp;
char words[40];
fprintf(fp, "40s%", words);
将words的内容以40s%的格式输出到fp所指向的文件中
6.int fscanf (FILE *__restrict __stream,const char *__restrict __format, ...)
第一个参数为文件指针,将文件的内容以固定格式输出到字符数组中
FILE *fp;
char words[40];
fscanf(fp, "%s", words);
将fp指向的文件中的字符串写入字符数组words中
7.fgets(char *, int n, FILE *)
从文件中读取字符串,直到第一个换行符,或读到n-1个字符或读到文件结尾结束,将其存到第一个参数所指向的字符数组中
8.fputs(char *, FILE *)
将第一个参数指向的字符串输出到第二个参数指向的文件中
9.int fseek (FILE *__stream, long int __off, int __whence);
文件的随即访问,第一个参数文件指针,指向待查找文件,第二个参数为偏移量,表示距起点的距离,第三个参数用来确定起点,可以是SEEK_SET(文件开始处),SEEK_CUR(当前位置),SEEK_END(文件末尾)
10. long int ftell (FILE *__stream) ;
返回参数指向的文件的当前位置距离文件开始位置处的字节数
11.int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
文件内容可能超过long所表示的范围,所以出现了fgetpos()函数,他将距离起点的字节放在第二个参数指向的内存上,
fpos_t为文件定位类型,根据其他类型定义的
如果成功找到距离起点字节返回0,否则返回非0
11.int fsetpos (FILE *__stream, const fpos_t *__pos);
使用pos指向位置上的fpos_t类型值来设置文件指针指向偏移该值后制定的位置,成功返回0,否则返回非0
12.int ungetc (int __c, FILE *__stream);
把c制定的字符放入输入流中,下次调用标准输入函数时将读取该字符
13.int fflush (FILE *__stream);
刷新缓冲区,将输出缓冲区中未写入的数据发送到__stream指定的文件中,如果__stream为空指针,则刷新所有缓冲区。
14.int setvbuf (FILE *__restrict __stream, char *__restrict __buf,int __modes, size_t __n) __THROW;
创建一个供I/O函数替换使用的缓冲区。打开文件且为对流进行操作前,调用该函数__stream识别待处理的流,buf指向待使用的缓冲区。
15.ize_t fwrite (const void *__restrict __ptr, size_t __size,size_t __n, FILE *__restrict __s);
以二进的方式写
__ptr时一个指针,__ptr指向的内存一块 __size字节,这样的内存块有__n块,将__ptr指向的__n块__size字节的内容写入到__s所指向的文件中
16.fread (void *__restrict __ptr, size_t __size, size_t __n,FILE *__restrict __stream)
__ptr时一个指针,将__s指向的文件中的内容写入到__ptr中指向的内存中,__ptr指向的内存一块 __size字节,这样的内存块有__n块
17.int feof(FILE *__stream);
int ferror (FILE *__stream)
标准输入出错或文件结束都会返回EOF,此函数用来区分正常读到文件结尾结束,还是出错结束,检测到文件结尾返回非0,否则返回0