C语言进阶——可存档通讯录(文件)

简介: C语言进阶——可存档通讯录(文件)


 

文章目录

  1. 为什么使用文件
  2. 什么是文件
  1. 文件的打开和关闭
  1. 文件的顺序读写
  2. 文件的随机读写
  1. 文本文件和二进制文件
  2. 文件读取结束的判定
  3. 文件缓冲区

9.通讯录3

  1. 为什么使用文件
  2. 什么是文件

2.1 程序文件

2.2 数据文件

2.3 文件名

  1. 文件的打开和关闭

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+”(读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件

  1. 文件的顺序读写

功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输出流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输出流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输出流
二进制输入 fread 文件
二进制输出 fwrite 文件

  1. 文件的随机读写

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 );

  1. 文本文件和二进制文件
  1. 文件读取结束的判定
  1. 文件缓冲区

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;

}
 载入信息:

 

相关文章
|
17天前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
1月前
|
存储 C语言
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
37 15
|
1月前
|
存储 C语言
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
|
1月前
|
存储 自然语言处理 程序员
【C语言】文件的编译链接和预处理
【C语言】文件的编译链接和预处理
|
1月前
|
存储 C语言
【C语言】C语言-设备管理系统(源码+数据文件)【独一无二】
【C语言】C语言-设备管理系统(源码+数据文件)【独一无二】
|
1月前
|
存储 搜索推荐 算法
【C语言】C语言—通讯录管理系统(源码)【独一无二】
【C语言】C语言—通讯录管理系统(源码)【独一无二】
|
1月前
|
存储 数据可视化 C语言
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
|
2月前
|
Linux C语言 Windows
C语言文件编程-Linux环境下运行
本文介绍了在Linux环境下使用C语言进行文件编程时的两种主要接口:C标准库函数与Linux系统调用。C标准库提供了`fopen`, `fread`, `fwrite`, 和 `fclose`等函数,适用于普通文件操作;而Linux系统调用如`open`, `read`, `write`, 和 `close`则更适合处理设备文件,同时也可用于普通文件。这两种方法的主要区别在于前者使用文件指针,后者使用文件描述符。文章还给出了两个示例程序:一个使用C标准库函数实现文件复制,另一个则使用Linux系统调用完成相同任务。
34 2
|
3月前
|
编译器 C语言
C语言编译详解:GCC分步编译与一次编译多个文件
C语言编译详解:GCC分步编译与一次编译多个文件
251 2
|
3月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
36 0