c语言数据存入文件
在C语言中,文件存储是一种常见的数据库存储方式,通过将数据以文本形式存储在文件中,可以实现对数据的持久化存储和快速访问,本文将详细介绍如何使用C语言实现文件存储数据库,包括文件的打开、关闭、读取、写入等操作。
(图片来源网络,侵删)
文件操作基本概念
1、文件指针:在C语言中,文件操作是通过指针来实现的,每一个文件在打开时都会被分配一个文件指针,通过这个指针可以对文件进行各种操作。
2、文件类型:在C语言中,文件可以分为文本文件和二进制文件,文本文件是以字符为单位进行读写的,而二进制文件则是以字节为单位进行读写的。
3、文件打开模式:在C语言中,文件打开模式决定了文件的读写权限,常见的文件打开模式有只读、写入、读写等。
文件操作函数
1、fopen:用于打开文件,返回一个指向文件的指针。
FILE *fopen(const char *filename, const char *mode);
2、fclose:用于关闭文件。
int fclose(FILE *stream);
3、fread:用于从文件中读取数据。
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
4、fwrite:用于向文件中写入数据。
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
5、fseek:用于设置文件读写位置。
int fseek(FILE *stream, long int offset, int origin);
6、ftell:用于获取当前文件读写位置。
long int ftell(FILE *stream);
7、rewind:用于将文件读写位置重置到文件开头。
void rewind(FILE *stream);
8、feof:用于判断是否已经到达文件末尾。
int feof(FILE *stream);
9、ferror:用于判断上次文件操作是否出错。
int ferror(FILE *stream);
实现一个简单的文件存储数据库
下面是一个简单的文件存储数据库示例,实现了数据的插入、查询和删除功能。
1、定义数据结构体:
typedef struct { int id; // 编号 char name[20]; // 姓名 int age; // 年龄 } Person;
2、插入数据:
void insert_data(FILE *file) { Person person; printf("请输入编号、姓名和年龄:"); scanf("%d %s %d", &person.id, person.name, &person.age); fwrite(&person, sizeof(Person), 1, file); // 将数据写入文件 }
3、查询数据:
void query_data(FILE *file) { Person person; printf("请输入要查询的编号:"); scanf("%d", &person.id); // 读取用户输入的编号 rewind(file); // 将文件读写位置重置到文件开头,以便从头开始查找数据 while (fread(&person, sizeof(Person), 1, file)) { // 从文件中读取数据,直到遇到文件末尾或找到匹配的数据为止 if (person.id == person.id) { // 如果找到了匹配的数据,输出结果并结束查找过程 printf("编号:%d ", person.id); printf("姓名:%s ", person.name); printf("年龄:%d ", person.age); break; } else { // 如果还没有找到匹配的数据,继续查找下一个数据块(注意这里是跳过了一个数据块) fseek(file, sizeof(Person), SEEK_CUR); // 将文件读写位置向后移动一个数据块的大小(即跳过一个数据块) } } }
4、删除数据:由于文件中的数据是顺序存储的,因此删除数据需要先找到要删除的数据,然后将后面的数据向前移动一个数据块的位置,覆盖掉要删除的数据,这个过程可以通过以下函数实现:
void delete_data(FILE *file) { Person person; printf("请输入要删除的编号:"); scanf("%d", &person.id); // 读取用户输入的编号,作为要删除的数据的编号(注意这里没有使用结构体中的id字段,因为我们需要保留这个字段的值以便输出结果)