返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言文件操作实现数据持久化(帮你快速了解文件操作函数)
  • 787
分享到

C语言文件操作实现数据持久化(帮你快速了解文件操作函数)

摘要

目录一.了解文件1.文件主要功能2.什么是文件二.文件的打开和关闭1.文件指针2.文件的打开和关闭2.关闭文件函数三.顺序读写文件函数fputc字符输入函数fgetc字符输入函数fp

一.了解文件

1.文件主要功能

  • 使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。
  • 在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显 示器上。
  • 其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理 的就是磁盘上文件。

2.什么是文件

磁盘上的文件是文件。

但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。

2.1程序文件

包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境 后缀为.exe)。

2.2数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件, 或者输出内容的文件。

 2.3 文件名

文件名包含3部分:文件路径+文件名主干+文件后缀

比如: c:\code\test.txt

二.文件的打开和关闭

以下所有讲的函数头文件都是:#include <stdio.h>

1.文件指针

一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

我们可以创建一个FILE*的指针变量:

FILE* pf;//文件指针变量

每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息, 使用者不必关心细节。

例如,VS2013编译环境提供的 stdio.h 头文件中有以下的文件类型申明:

 不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。

2.文件的打开和关闭

1.打开文件函数:

代码演示: 

FILE *pf = fopen("test.txt", "w");

文件名:

文件名分为两种形式:

1.绝对路径

文件路径+文件名主干+文件后缀

2.相对路径

文件名主干+文件后缀(也可以不加后缀)

相对路劲是在当前程序文件的文件夹下,去查找

 文件的打开方式:

文件使用方式含义如果指定文件不存在
“r”(只读)为了输入数据,打开一个已经存在的文本文件出错
“w”(只写)为了输出数据,打开一个文本文件建立一个新的文件
“a”(追加)向文本文件尾添加数据建立一个新的文件
“rb”(只读)为了输入数据,打开一个二进制文件出错
“wb”(只写)为了输出数据,打开一个二进制文件建立一个新的文件
“ab”(追加)向一个二进制文件尾添加数据出错
“r+”(读写)为了读和写,打开一个文本文件出错
“w+”(读写)为了读和写,建议一个新的文件建立一个新的文件
“a+”(读写)打开一个文件,在文件尾进行读写建立一个新的文件
“rb+”(读写)为了读和写打开一个二进制文件出错
“wb+”(读写)为了读和写,新建一个新的二进制文件建立一个新的文件
“ab+”(读写)打开一个二进制文件,在文件尾进行读和写建立一个新的文件

返回:

正确代码书写:

//打开文件
	FILE *pf = fopen("test.txt", "w");
	//文件是有可能打开失败的,文件名出错,打开方式问题等
	if (NULL == pf)
	{
		perror("fopen");
		return;
	}

只有打开文件就一定要搭配上判断

2.关闭文件函数

代码演示: 

fclose(pf);

正确的代码规范:

int main()
{
	//打开文件
	FILE *pf = fopen("test.txt", "w");
	//文件是有可能打开失败的,文件名出错,打开方式问题等
	if (NULL == pf)
	{
		perror("fopen");
		return;
	}
 
	//写文件
	//……
 
	//关闭文件
	fclose(pf);
	pf = NULL;//防止再次使用此指针
 
	return 0;
}

三.顺序读写文件函数

  • 这里的输入是指把文件的数据输入到程序内存中
  • 输出指的是内存中的数据,输出到文件中

站在程序内存的角度,把文件想成平时打印的cmd黑框就好

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

fputc字符输入函数

函数原型:

补充:输入流是什么 后面讲现在你们看一下代码就懂

函数代码: 

这是我当前文件下的一些文件,我讲利用打开方式自动创建一个文件

运行程序前的文件夹:

 代码:

#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	int i = 0;
	for (i = 0; i < 26; i++)
	{
		fputc('a' + i, pf);//写入26个字母
	}
	
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

运行程序前的文件夹:

你们可以去看看是不是跟我打开的文件夹名相同,而且已经在里面写入了26个字母:

返回:

函数正常执行返回所写数据,字符返回对应ASII码值

发生写入错误返回EOF

fgetc字符输入函数

函数原型

返回:

函数正常执行返回所写数据,字符返回对应ASII码值

发生写入错误返回EOF

代码:

我会读取刚刚fgetc输入到文件中的数据

注意:我打开方式的变化

#include<stdio.h>int main(){//打开文件FILE* pf = fopen("test.txt", "r");if (NULL == pf){perror("fopen");return 1;}//读文件int ch;while ((ch = fgetc(pf)) != EOF){printf("%c ", ch);}//关闭文件fclose(pf);pf = NULL;return 0;}

fgetc读取了一个字符会自动向后移动一位

结果:

fputs文本行输出函数

函数原型:

 返回:

代码:

一次输出一行

#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fputs("hallo\n", pf);
	fputs("Word", pf);
	
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

结果:

有此可见转意字符\n等也是可以操作的

补充:因为文件方式的原因会把之前的数据覆盖掉,成为新的数据如果想不覆盖要用追加的方式打开,我现在把打开方式改为追加执行

#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "a");//注意我把打开方式改为了追加a
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fputs("hallo\n", pf);
	fputs("word", pf);
	
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

结果:

 还有一个二进制的追加ab,其余打开方式请自行去查看上面的表格

fgets文本行输入函数

函数原型:

 返回:

代码:

一次输入一行

#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	char arr[] = "#######################";//用来观察一下的字符串
 
	fgets(arr, 20, pf);
	printf("%s", arr);//注意我这里没有加\n因为之前的输入里面是输入进去了\n的
	fgets(arr, 20, pf);
	printf("%s", arr);
 
 
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

注意我这里没有加\n因为之前的输入里面是输入进去了\n的

结果:

fprintf格式化输出函数

函数原型:

 可以发现只是多了一个参数其余并没有变化

返回:

代码:

格式化输出数据到文件中

#include<stdio.h>
struct S
{
	char name[20];
	int age;
	float scores;
};
 
int main()
{
	//打开文件
	struct S s = { "Laoli" ,20 ,95.5f };
 
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fprintf(pf, "%s %d %f\n", s.name, s.age, s.scores);
 
 
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

这个字符在输出字符串时遇到空格也会正常输出

结果:

fscanf格式化输入函数

函数原型: 

 返回:

代码:

把刚刚放进文件的数据格式化拿出来

#include<stdio.h>
struct S
{
	char name[20];
	int age;
	float scores;
 
};
 
int main()
{
	//打开文件
	struct S s = { 0 };
	FILE* pf = fopen("test.txt", "r");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.scores));
	printf("%s %d %f", s.name, s.age, s.scores);
 
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

结果:

这个函数在遇到空格会停止输入所有项,例如在Laoli中间加上空格:Lao li

fwrite二进制输出函数

函数原型: 

这个函数是以二进制的方式进行输出的

 返回:

 代码:

#include<stdio.h>
struct S
{
	char name[20];
	int age;
	float scores;
 
};
 
int main()
{
	//打开文件
	struct S s = { "Laoli" ,20 ,95.5f };
 
	FILE* pf = fopen("test.txt", "wb");//注意我已经改变了文件的打卡方式
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	fwrite(&s, sizeof(struct S), 2, pf);
 
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return

注意我已经改变了文件的打卡方式

结果:

大家可以看到除了字符串什么都看不懂呀,这个烫烫烫烫烫烫是什么鬼呀,其实是因为二进制的形式存储的,计算机可以看懂就可以了,也可以利用fread函数查看内容

fread二进制输入函数

函数原型:

返回:

代码:

读取刚刚存入文件的数据,以二进制形式读取

#include<stdio.h>
struct S
{
	char name[20];
	int age;
	float scores;
 
};
 
int main()
{
	//打开文件
	struct S s = { 0 };
 
	FILE* pf = fopen("test.txt", "rb");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	fread(&s, sizeof(struct S), 1, pf);
	printf("%s %d %f", s.name, s.age, s.scores);
 
 
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

结果:

四. 解析上述的流

以上函数都是在文件流中拿信息,是需要fopen函数来打开的文件流

还几个默认打开的流:

 代码:

五.文件的随机读写

其实这些函数也并不是随机的,也是有规律的,但不再是从开头到结尾了

fseek

函数原型:

偏移量(字节为单位): 

向右移动用正数,向左移动用负数

起始位置设置:

 返回:

代码:

我手动的在文件中添加这样的数据:

从末尾移动三位取出数据:

#include<stdio.h>
 
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "rb");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
 
	fseek(pf, -3, SEEK_END);
	int ch = fgetc(pf);
	printf("%c\n", ch);
 
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

ftell

功能:返回文件指针相对于起始位置的偏移量

 函数原型:

返回: 

成功返回当前位置

 代码:

我们就用刚刚的代码加上函数试一下:

#include<stdio.h>
 
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "rb");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
 
	fseek(pf, -3, SEEK_END);
	int ch = fgetc(pf);
	printf("%c\n", ch);
	int pos = ftell(pf);
	printf("%d", pos);
 
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

结果:

分析:

rewind

功能:让文件指针的位置回到文件的起始位置

函数原型: 

代码:

#include<stdio.h>
 
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "rb");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
 
	fseek(pf, -3, SEEK_END);
	int ch = fgetc(pf);
	printf("%c\n", ch);
 
	rewind(pf);//回到文件的起始位置
	int pos = ftell(pf);
	printf("%d", pos);
 
	//关闭文件
	fclose(pf);
	pf = NULL;
 
	return 0;
}

结果:

这个函数非常简单不做过多介绍了

此片文章设计大量函数,记不住很正常,收藏一波需要的时候来查一查。

总结

到此这篇关于C语言文件操作实现数据持久化(帮你快速了解文件操作函数)的文章就介绍到这了,更多相关C语言文件操作数据持久化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言文件操作实现数据持久化(帮你快速了解文件操作函数)

本文链接: https://lsjlt.com/news/171025.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言文件操作实现数据持久化(帮你快速了解文件操作函数)
    目录一.了解文件1.文件主要功能2.什么是文件二.文件的打开和关闭1.文件指针2.文件的打开和关闭2.关闭文件函数三.顺序读写文件函数fputc字符输入函数fgetc字符输入函数fp...
    99+
    2022-11-13
    c语言文件操作数据持久化分析 c语言文件操作函数例子 C语言文件操作
  • C语言文件操作之fread函数详解
    目录前言一、fread 函数二、缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 )三、处理乱码问题四、记录读取的字节个数五、读取到 0 字节的情况六、读取完毕...
    99+
    2024-04-02
  • 一篇文章带你了解C语言文件操作中的几个函数
    目录总结fopen:有两个参数,第一个是要被打开或者被创建的文件名,第二个是以什么方式打开。这两个参数要分别用双引号括起来 打开文件和关闭文件的基本流程,关闭文件之后要置空 f...
    99+
    2024-04-02
  • C语言常见的文件操作函数
    目录一、文件的打开和关闭1、文件指针2、文件打开和关闭二、文件的顺序读写 1、fgetc()和fputc()函数2、fgets()和fputs()函数 3、fsc...
    99+
    2024-04-02
  • 一篇文章带你了解C语言的文件操作
    目录为什么使用文件什么是文件程序文件数据文件文件名文件的打开和关闭文件指针fopen和fclose函数文件的顺序读写总结为什么使用文件 我们在想既然是通讯录就应该把信息记录下来,只有...
    99+
    2024-04-02
  • C语言怎么实现文件操作
    这篇文章将为大家详细讲解有关C语言怎么实现文件操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是文件磁盘上的文件就是文件。在程序设计中,我们一般谈的文件有两种:程序文件和数据文件程序文件包括源程序文...
    99+
    2023-06-25
  • C语言文件操作与相关函数介绍
    目录1.操作的准备2.文件的打开3.文件的使用方式4.相关的函数4.1 fputc4.2 fgetc4.3 fputs4.4 fgets4.5 fprintf4.6 fscanf4....
    99+
    2024-04-02
  • C语言中如何实现文件操作
    这篇文章主要介绍了C语言中如何实现文件操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么使用文件我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候...
    99+
    2023-06-29
  • C语言常见的文件操作函数有什么
    这篇文章给大家介绍C语言常见的文件操作函数有什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、文件的打开和关闭1、文件指针每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,...
    99+
    2023-06-26
  • PHP 文件操作中,数组如何帮助你实现实时数据处理?
    PHP 是一种非常流行的后端编程语言,它可以帮助我们处理各种各样的任务,包括文件操作和数据处理。在 PHP 文件操作中,数组是一个非常有用的工具,可以帮助我们实现实时数据处理。在本文中,我们将探讨 PHP 文件操作中如何使用数组来实现实时数...
    99+
    2023-09-01
    文件 数组 实时
  • C语言怎么实现对文件进行操作
    这篇“C语言怎么实现对文件进行操作”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言怎么实现对文件进行操作”文章吧。文件指...
    99+
    2023-07-05
  • PHP 文件操作中,数组是你最好的帮手,实现实时数据处理轻松愉快!
    PHP 作为一种广泛应用的编程语言,在文件操作中有着十分重要的地位。在实时数据处理中,我们需要快速高效地读取、写入文件,并对文件中的数据进行处理。而在这个过程中,数组作为 PHP 语言中的一种重要数据类型,可以帮助我们快速高效地完成数据的...
    99+
    2023-09-01
    文件 数组 实时
  • 你知道PHP中有哪些UNIX文件函数可以帮你完成文件操作吗?
    PHP是一种非常流行的服务器端脚本语言,被广泛应用于Web开发领域。在PHP中,文件操作是一个非常常见的需求,而UNIX文件函数则是PHP中常用的文件操作函数之一。本文将介绍PHP中常见的UNIX文件函数,帮助你更好地完成文件操作。 一、打...
    99+
    2023-10-18
    unix 文件 函数
  • c语言简单实现文件 r/w 操作方法
    数据的输入和输出几乎伴随着每个 C 语言程序,所谓输入就是从“源端”获取数据,所谓输出可以理解为向“终端”写入数据。这里的源端可以是键盘、鼠标、硬盘、光盘、扫描仪等输入设备,终端可以...
    99+
    2024-04-02
  • C语言实现银行管理系统(文件操作)
    本文实例为大家分享了C语言实现银行管理系统的具体代码,供大家参考,具体内容如下 银行管理系统主要有五个模块组成: 1、查询账户信息2、存钱3、取款4、转账5、退出系统 测试文件:(首...
    99+
    2024-04-02
  • PHP文件函数详解:实现文件的读写和操作功能
    PHP是一种高性能的脚本语言,广泛用于Web开发。在PHP中,文件操作是一项非常常见而重要的功能。本文将详细介绍PHP中文件函数的使用,以帮助读者实现文件的读写和操作功能。一、文件的打开和关闭在PHP中,打开文件使用的是fopen函数,语法...
    99+
    2023-11-20
    PHP文件操作 文件读写 文件函数详解
  • C语言中炫酷的文件操作实例详解
    目录什么是文件程序文件数据文件 (本文重点)文件名文件的打开和关闭文件指针文件函数相对路径与绝对路径输入输出流二进制读写fwirtefread总结什么是文件 磁盘上的文件是文件 但是...
    99+
    2024-04-02
  • C语言实现对文件进行操作的示例详解
    目录前言文件指针文件的打开和关闭文件的打开方式文件读写函数二进制方式存储文件对文件进行拷贝文件随机读写函数文件缓冲区前言 文件操作 在运行程序的时候,此时数据是存放在内存中,当程序退...
    99+
    2023-05-15
    C语言实现文件操作 C语言文件操作 C语言文件
  • 深入了解C语言中常见的文件操作方法
    目录1.为什么使用文件2.什么是文件2.1文件分类2.2 文件名3.文件的打开和关闭3.1文件指针3.2 如何使用文件指针4.文件的读写1.为什么使用文件 大家在写程序的时候有没有一...
    99+
    2024-04-02
  • C语言实现学生信息管理系统(文件操作)
    目录新增函数——文件操作;1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1.定义提示菜单2.增加学生记录3....
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作