目录
1 fopen文件操作方式
| 操作方式 | 含义 | 如果指定文件不存在 |
|---|---|---|
| “r”只读 | 为了输入数据,打开一个已存在的文本文件 | 出错 |
| “w”只写 | 为了输出数据,打开一个文本文件(清空) | 建立新文件 |
| “a”追加 | 向文本文件末尾添加数据 | 出错 |
| “rb”只读 | 为了输入数据,打开一个已存在的二进制文件 | 出错 |
| “wb”只读 | 为了输出数据,打开一个二进制文件(清空) | 建立新文件 |
| “ab”追加 | 向二进制文件末尾添加数据 | 出错 |
| “r+”读写 | 为了读和写,打开一个文本文件 | 出错 |
| “w+”读写 | 为了读和写,打开一个文本文件(清空) | 建立新文件 |
| “a+”读写 | 为了读和写,打开一个文本文件 | 出错 |
| “rb+”读写 | 为了读和写,打开一个二进制文件 | 出错 |
| “wb+”读写 | 为了读和写,打开一个二进制文件(清空) | 建立新文件 |
| “ab+”读写 | 为了读和写,打开一个二进制文件 | 出错 |
- 用“
r”方式打开文件只能用于向计算机输入而不能用作向该文件输出数据(即读数据到变量中),若文件不存在会出错 - 用“
w”方式打开文件只能用于向该文件写数据(即往文件里写数据),而不能用来向计算机输入,如果原文件不存在,则创建该文件,若该文件已存在,则打开文件前将其删除,再重新创建一个 - 若要向文件末尾添加数据(不希望删除原有数据),则使用“
a”方式,文件不存在会出错 - 带“
+”的方式,既可用来输入数据,也可用来输出数据 - 若以任意方式打开文件失败,
fopen函数会返回NULL - 在以文本文件(ASCII)读入字符时,遇到回车换行符(
\r\n),系统把它转换为一个换行符(\n),在输出时把换行符(\n)转换为回车(\r)和换行(\n)两个字符 - 在以二进制方式时,不进行上述转换,在内存中的数据形式与输出到外部文件中的数据形式完全一致,一一对应
1.1 打开文件fopen
FILE *fp = fopen("abc.txt", "r");
1.2 关闭文件fclose
fclose(fp); // 关闭成功返回0,否则返回EOF(-1)
2 向文件读写字符
2.1 读字符fgetc
函数原型int fgetc(FILE *stream)
- 调用形式
ch = fgetc(fp) - 从
fp指向的文件读入一个字符,该函数以无符号char强制转换为int的形式返回读取的字符,读成功,带回所读的字符,失败则返回文件结束标志EOF(-1)
2.2 写字符fputc
函数原型int fputc(int char, FILE *stream)
- 调用形式
fputc(ch,fp) - 把字符
ch写到文件指针变量fp所指的文件中,输出成功返回值就是输出的字符,输出失败则返回EOF(-1)
3 向文件读写字符串
3.1 读字符串fgets
函数原型char *fgets(char *str, int n, FILE *stream)
- 调用形式
fgets(str, n, fp) n为要求得到字符个数(但实际上只有n-1),从fp所指的文件读入一个长度为n-1的字符串,并在最后加一个\0- 然后把这
n个字符存放在字符数组str中,若在读完n-1个字符之前遇到换行符(\n)或文件结束符EOF,读入结束 - 若执行函数成功,则返回
str数组首元素的地址,若一开始就遇到文件末尾或读数据出错,则返回NULL
3.2 写字符串fputs
函数原型int fputs(const char *str, FILE *stream)
- 调用形式
fputs(str, fp),把str所指向的字符串写到文件指针变量fp指向的文件中,字符串末尾的\0不输出 - 输出成功返回
0,失败返回EOF
4 格式化方式读写文件
fprintf和fscanf,在输入时要将文件的ASCII码转换为二进制形式在保存,再输出时又要将二进制形式转换为字符,要花费较多时间
4.1 格式化写fprintf
函数原型int fprintf(FILE *stream, const char *format, ...)
- 如果成功,则返回写入的字符总数,否则返回一个负数
4.2 格式化读fscanf
函数原型int fscanf(FILE *stream, const char *format, ...)
- 如果成功,返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回
EOF
5 二进制向文件读写一组数据
5.1 二进制读fread
函数原型size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream),
ptr为从文件读入的数据保存的地址size为要读的字节数nmemb为元素的个数,每个元素的大小为 size 字节stream输出流的FILE指针- 返回成功读取的个数
5.2 二进制写fwrite
函数原型size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr为要向文件写入的数据首地址size为要写的字节数nmemb为元素的个数,每个元素的大小为 size 字节stream输入流的FILE指针- 返回成功写入的个数
6 随机读写数据文件
6.1 指向文件开头rewind
函数原型void rewind(FILE *stream)
rewind的作用是使文件位置标记重新返回文件的开头- 此函数没有返回值
- 调用形式
rewind(fp);,将fp指向文件开头
6.2 改变位置fseek
函数原型int fseek(FILE *stream, long int offset, int whence)
stream为所操作的文件指针offset这是相对 whence 的偏移量,以字节为单位,注意它是long int类型whence这是表示开始添加偏移offset的位置。它一般指定为下列常量之一:
| 常量 | 描述 | 数字表示 |
|---|---|---|
| SEEK_SET | 文件的开头 | 0 |
| SEEK_CUR | 文件指针的当前位置 | 1 |
| SEEK_END | 文件的末尾 | 2 |
- 向后移动,调用形式
fseek(fp,100L,SEEK_SET);,表示从文件的开头,向后偏移到100个字节 - 向前移动,调用形式
fseek(fp,-200L,SEEK_END);,表示从文件的末尾,向前偏移到200个字节 - 如果成功,则该函数返回零,否则返回非零值
6.3 测定当前位置ftell
函数原型long int ftell(FILE *stream)
stream文件指针ftell函数的作用是得到流式文件中文件位置标记的当前位置- 该函数返回位置标识符的当前值。如果发生错误,则返回
-1L,全局变量errno被设置为一个正值
7 文件读写出错检测
7.1 函数ferror
- 在调用一个输入输出函数后,可以使用
ferror(fp)检测是否出现错误 - 返回
0代表未出错,返回非零表示出错 - 对同一个文件每调用一次输入输出函数,都会产生新的值,应该在每次输入输出函数调用后,立即检测
7.2 函数clearerr
- 若调用一个输入输出函数出错后,
ferror为非零值 - 调用
clearerr(fp);可以将错误标记的值置位0,以便一下次检测
2731

被折叠的 条评论
为什么被折叠?



