文章目录
- 为什么使用文件
- 什么是文件
- 文件的打开和关闭
- 文件的顺序读写
- 文件的随机读写
- 文本文件和二进制文件
- 文件读取结束的判定
- 文件缓冲区
9.通讯录3
- 为什么使用文件
- 什么是文件
2.1 程序文件
2.2 数据文件
2.3 文件名
- 文件的打开和关闭
3.1 文件指针
下面我们可以创建一个FILE*的指针变量:
FILE* pf;//文件指针变量
例如:
3.2 文件的打开和关闭
/打开文件
FILE fopen ( const char filename,const char* mode );
//关闭文件
int fclose ( FILE* stream );
打开方式:
文件使用方式 含义 如果指定文件不存在
“r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错
“w”(只写) 为了输出数据,打开一个文本文件 建立一个新的文件
“a”(追加) 向文本文件尾添加数据 建立一个新的文件
“rb”(只读) 为了输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文件 建立一个新的文件
“ab”(追加) 向一个二进制文件尾添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建议一个新的文件 建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件
“rb+”(读写) 为了读和写打开一个二进制文件 出错
“wb+”(读写) 为了读和写,新建一个新的二进制文件 建立一个新的文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件
- 文件的顺序读写
功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输出流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输出流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输出流
二进制输入 fread 文件
二进制输出 fwrite 文件
- 文件的随机读写
5.1fseek
根据文件指针的位置和偏移量来定位文件指针
int fseek ( FILE* stream, long int offset, int origin );
5.2 ftell
返回文件指针相对于起始位置的偏移量
long int ftell ( FILE* stream );
5.3 rewind
让文件指针的位置回到文件的起始位置
void rewind ( FILE* stream );
- 文本文件和二进制文件
- 文件读取结束的判定
- 文件缓冲区
9.通讯录3
case 0:
//保存通讯录
SaveContact(&con);
DestroyContact(&con);
printf("\n退出通讯录\n");
break;
//保存通讯录
void SaveContact(Contact* pc)
{
assert(pc);
FILE* pfWrite = fopen("contact.txt", "wb");
if (pfWrite == NULL)
{
perror("SaveContact");
return;
}
//写文件——二进制写
int i = 0;
for (i = 0; i < pc->count; i++)
{
fwrite(pc->data+i, sizeof(PeoInfo), 1, pfWrite);
}
fclose(pfWrite);
pfWrite = NULL;
}
//动态版本+文件
int InitContact(Contact* pc)
{
pc->count = 0;
pc->data = (PeoInfo*)calloc(DEFAULT_Sz,sizeof(PeoInfo));
if (pc->data == NULL)
{
printf("InitContact:%s\n", strerror(errno));
return 1;
}
pc->capacity = DEFAULT_Sz;
//加载文件信息到通讯录中
LoadContact(pc);
return 0;
}
//加载文件信息到通讯录中
void LoadContact(Contact* pc)
{
FILE* pfRead = fopen("contact.txt", "rb");
if (pfRead == NULL)
{
perror("LoadContact");
return;
}
PeoInfo tmp = { 0 };
while (fread(&tmp, sizeof(PeoInfo), 1, pfRead) == 1)
{
CheckCapacity(pc);
pc->data[pc->count] = tmp;
pc->count++;
}
fclose(pfRead);
pfRead = NULL;
}
载入信息: