从短暂的记忆到永恒的回忆——文件相关操作

一、为什么与是什么

写程序的时候,如果数据只是储存在内存中,一旦退出程序数据就被删除,每次打开又要重新录入数据,无法做到永久保存

于是聪明的人类发明了磁盘以及数据库用于存放数据。而我们常把磁盘中的文件就简称为文件

二、分类

从短暂的记忆到永恒的回忆——文件相关操作_第1张图片

(按照功能的角度)

分为程序文件数据文件

【程序文件】

源程序文件(.c)

目标文件(.obj)

可执行文件(.exe)

(后缀为Windows环境下)

【数据文件】

程序运行时用于读写数据

当我们把信息输入到磁盘上,在把磁盘上读取到的信息用于程序中就是在处理磁盘上的文件

数据文件又分为文本文件二进制文件

文本文件:ASCII码的形式存储

二进制文件:以二进制的形式存储

三、怎么玩

先来了解一个概念

【文件指针】

又称文件类型指针,用 FILE 来表示

每个使用的文件都会有一个存放对应信息(文件名/文件状态/文件位置)的信息区放在内存中,具体来说,这些信息存放在一个系统自动创建的结构体变量中,FILE就是指向这块区域的指针。

请问喝牛奶分几步?

3步:打开牛奶,喝牛奶,盖好盖子

那么,文件的操作分几步?

3步:打开文件使用文件关闭文件

1. 文件的打开和关闭

注意:这是必须操作的步骤,而不是选做的。

FILE * fopen ( const char * filename, const char * mode ); //打开文件
int fclose ( FILE * stream );//关闭文件

ps:其中的mode表示文件的打开方式,一般有以下这些

文本文件:r只读 / w只写 / a追加

r+读写打开 / w+读写建立 / a+文件尾读写

二进制文件:rb只读 / wb只写 / ab追加

rb+读写打开 / wb+读写建立 / ab+文件尾读写

*文件打开时未设置路径则默认当前工作路径

直接看例子可能会更好理解一些

【例子】

#include 
int main () {
    FILE * pFile;
    //打开文件
    pFile = fopen ("myfile.txt","w"); 

    if (pFile!=NULL)
    {
        fputs("fopen example",pFile); //文件操作
        fclose(pFile);//关闭文件
    }
    return 0; 
}

2. 文件的顺序读写

功能 函数名
字符输入函数 fgetc
字符输出函数 fputc
文本行输入函数 fgets
文本行输出函数 fputs
格式化输入函数 fscanf
格式化输出函数

fprintf

二进制输入

fread

二进制输出 fwrite

*前8个适用于所有输入输出流,最后2个适用于文件

以之前文章中的通讯录为例,更加详细的内容可见之前发过的文章

void LoadContact(Contact* pc)
{
	FILE* pf = fopen("Contact.txt", "rb");//打开文件,以读取二进制文件的形式
	if (pf == NULL)
	{
		perror("LoadContact");//打印错误信息
		return;
	}//打开失败判断
	Peoinfo tmp = { 0 };
	while (fread(&tmp, sizeof(Peoinfo), 1, pf))
//fread参数解读:读取到的数据存放的地址,读取数据的大小,读取数据的个数,读取数据的位置
	{
		CheckCapacity(pc);

        //读取文件信息
		pc->data[pc->sz] = tmp;
		pc->sz++;
	}
    //关闭文件
	fclose(pf);
	pf = NULL;
}
void SaveContact(Contact* pc)
{
	FILE* pf = fopen("contact.txt", "wb");//以输入数据的方式打开文件
	if (pf == NULL)
	{
		perror("SaveContact");
		return;
	}
	//写信息到文件
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		//fwrite(&(pc->data[i]), sizeof(PeoInfo), 1, pf);
		fwrite(pc->data+i, sizeof(PeoInfo), 1, pf);//参数类似fread
	}
 
	fclose(pf);//关闭文件!!!千万要记得!!!
	pf = NULL;//并且把指针置空
}

你可能感兴趣的:(c语言,数据结构,c++)