思维导图:
文件概念
什么是文件
文件:是指由创建者所定义的一组相关信息的集合。
文件的分类
从编码上来说:
- 文本文件:
文本文件:一般指只有字符原生编码构成的二进制计算机文件。
- 二进制文件:
二进制文件:一般指包含ASCII及扩展ASCII字符中编写的数据或程序指令的文件。
- 广义:在外部存储方式是二进制。
- 狭义:指除文本文件以外的文件。
一个简单的文件读写
基本步骤
粗略的步骤:
- 打开文件
- 读/写文件
- 关闭文件
细化的步骤:
- 创建FILE文件指针,指向要打开的文件
- 调用fopen函数打开文件
- 根据需要对文件进行相应的读/写操作
- 调用fclose函数关闭文件流
代码演练
实验环境,vs2013
#define _CRT_SECURE_NO_WARNINGS// 强行除去安全检查
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 创建文件指针
FILE *fp;
// 创建临时存储变量
int ch;
// 创建文件路径
const char *path = "D:\\test.txt";
// 调用fopen函数打开文件
fp = fopen(path, "r");
//读取文件中的内容
while ((ch = getc(fp)) != EOF)
{
putc(ch, stdout);
}
printf("\n");
// 关闭文件
fclose(fp);
system("pause");
return 0;
}
上面的这个程序只能说是一个大概的框架,没有添加安全检查。
更改后:
#define _CRT_SECURE_NO_WARNINGS// 强行除去安全检查
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 创建文件指针
FILE *fp;
// 创建临时存储变量
int ch;
// 创建文件路径
const char *path = "D:\\test.txt";
// 调用fopen函数
// 判断文件是否正常打开
if ((fp = fopen(path, "r")))
{
while ((ch = getc(fp)) != EOF)
{
putc(ch,stdout);
}
printf("\n");
}
else
{
perror(path);
exit(EXIT_FAILURE);
}
// 判断文件是否正常关闭
if (fclose(fp) == EOF)
{
perror(path);
exit(EXIT_FAILURE);
}
system("pause");
return 0;
}
两次成功运行结果:
假如删除D盘下的test.txt,看下面的运行结果(请将else中,exit(EXIT_FAILURE);注释掉):
补充:
错误报告函数:
void perror(char const *message);
终止函数:
void exit(int status);
常用函数
单个字符IO流
getc
从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。
函数原型:
int getc(FILE *stream);
参数:
FILE *stream
:这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流。
返回值:
该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
putc
把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。
函数原型:
int putc(int char,FILE *stream);
参数:
int char
:要被写入的字符。该字符以其对应的 int 值进行传递。FILE *stream
:指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流。
返回值:
该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误,则返回 EOF。
实例:
#define _CRT_SECURE_NO_WARNINGS// 强行除去安