深入了解C语言中常见的文件操作方法

目录
  • 1.为什么使用文件
  • 2.什么是文件
    • 2.1文件分类
    • 2.2 文件名
  • 3.文件的打开和关闭
    • 3.1文件指针
    • 3.2 如何使用文件指针
  • 4.文件的读写

1.为什么使用文件

大家在写程序的时候有没有一个困惑,就是我写的程序,输入一些数据后,当我把程序关掉以后数据就消失了。这是因为程序运行时,所有的数据都存储在内存中,当程序退出后,程序中的数据自然就不存在了。等下次再运行程序时,又要重新录入数据,非常难受

​ 如何解决这个问题呢,我们可以学习使用文件来将其保存

2.什么是文件

2.1文件分类

在程序设计中,一般将文件分为两部分:程序文件和数据文件

程序文件:

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

数据文件:

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

这次我们想要聊的是第二种数据文件,它可以帮助将我们运行时的数据存储到磁盘中,以便我们下次使用

2.2 文件名

每一个文件都有自己的名字,它由三部分组成

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

c:\code\test.txt

3.文件的打开和关闭

3.1文件指针

想要打开一个文件,我们需要使用到文件指针,该指针是由系统声明的,例如,VS2013编译环境提供的 stdio.h 头文件中有以下的文件类型申明

struct _iobuf {
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
       };
typedef struct _iobuf FILE;

相信很多人看到这里,已经不想再读下去了,坚持一下,前面这些并不重要

3.2 如何使用文件指针

首先我们需要定义一个文件指针

FILE* pf

想要将数据存储到文件中或者从文件中读取数据,我们先要将文件打开,ANSIC 规定使用fopen函数来打开文件。

FILE * fopen ( const char * filename, const char * mode );

filename: 文件名

mode : 文件的打开方式

下面是一些常见的mode

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

注:这里的输入是指将数据写到内存中,输出是写到文件中

3.读写数据后使用fclose关闭文件。

int fclose ( FILE * stream );
// 示例
#include <stdio.h>
int main ()
{
  FILE * pFile;
  //打开文件
  pFile = fopen ("myfile.txt","w");
  //文件操作
  if (pFile!=NULL)
 {
    fputs ("fopen example",pFile);
    //关闭文件
    fclose (pFile);
 }
  return 0;
}

4.文件的读写

现在我们知道了,如何去打开一个文件,那么如何将它的数据输入到程序中呢?

首先我想介绍一些函数

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

看不懂? 没关系,接下来我将用一个示例告诉你如何使用。

//这是我以前写通信录时用到的一些方法
typedef struct Contact
{
	struct contact_person* data;
	int count;	//通讯录中人员个数
	int capacity;
}Contact;//通讯录类型的指针

void Save(Contact* con) //将数据存储到文件中
{
	FILE* fp = fopen("contact.txt", "wb");
	if (fp == NULL)
	{
		printf("Save()::%s", strerror(errno)); //如果打开失败,报错
		return;
	}
	else
	{
		fwrite(con->data, sizeof(struct contact_person), con->count, fp);//将数据写到contect.txt中
	}
	fclose(fp); //关闭文件
	fp = NULL;
}

void Load(Contact* con) //将文件中的数据加载到内存中
{
	FILE* fp = fopen("contact.txt", "r");
	if (fp == NULL)
	{
		printf("Load()::%s", strerror(errno));
		return;
	}
	else
	{
		struct contact_person tmp;
		while (fread(&tmp, sizeof(struct contact_person), 1, fp))// fread的返回值为读到数据的个数,用来判断是否继续读取
		{
			Check_capacity(con);//检测通讯录容量是否足够
			con->data[con->count] = tmp;
			con->count++;
		}
	}
	fclose(fp);
	fp = NULL;
}

到此这篇关于深入了解C语言中常见的文件操作方法的文章就介绍到这了,更多相关C语言文件操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言进阶之文件操作详解

    目录 0.Intro 1.文件名 2.文件的打开和关闭 2.1文件指针 2.2打开和关闭文件 3.文件顺序读写 3.1利用以上函数实现拷贝文件操作 3.2二进制的读写 3.3格式化输入输出函数 4.文件的随机读写操作 4.1fseek 4.2ftell 4.3rewind 5.文本文件和二进制文件 5.1一个数据在内存中的存储方式 6.文件读取错误的判定 6.1被错误使用的feof 7.文件缓冲区 7.1行缓冲 总结 0. Intro 在使用操作数据库之前,记录信息,录入数据需要文件操作,这样就

  • C语言文件操作详解以及详细步骤

    目录 一.为什么使用文件? 二.什么是文件? 1.程序文件 2.数据文件 3.文件名 三.文件的打开和关闭 1.文件指针 2.文件的打开和关闭 4.文件的顺序读写 四.fseek函数 五.ftell函数 六.rewind函数 七.文本文件和二进制文件 八.文件读取结束的判定 1.feof函数的错误使用 九.文件缓冲区 总结 一.为什么使用文件? 当我们在编写一个项目的时候,自然而然想到要把之前写入的数据保存起来.而只有我们自己选择删除数据的时候,数据才不复存在.这就涉及到了数据持久化的问题,我们

  • C语言全面梳理文件操作方法

    目录 1.什么是文件 1.1程序文件 1.2数据文件 1.3文件名 2.为什么使用文件 3.文件的打开和关闭 3.1文件指针 3.2文件的打开和关闭 4.文件的顺序读写 什么是流 5.文件的随机读写 5.1fseek 5.2ftell 5.3rewind 1.什么是文件 我们先从基本概念入手,内存中存放的数据在计算机关机后就会消失.要长久保存数据,就要使用硬盘.光盘.U 盘等设备.为了便于数据的管理和检索,引入了“文件”的概念.一篇文章.一段视频.一个可执行程序,都可以被保存为一个文件,并赋予一

  • C语言全面细致讲解文件操作

    目录 什么是文件 程序文件 数据文件 文件名 文件指针 文件的打开和关闭 文件的顺序读写 字符输入输出函数 字符串输入输出函数(fgets,fputs) 格式化输入输出函数(fscanf,fprintf) 二进制输入输出函数(fread,fwrite) 文件的随机读写 fseek ftell 文件读取结束的判定 什么是文件 磁盘上的文件是文件.但是在程序设计中,我们一般谈的文件有两种:程序文件.数据文件(从文件功能的角度来分类的). 程序文件 包括源程序文件(后缀为.c),目标文件(window

  • C语言文件操作详情(二)

    目录 前言 一.文件的顺序读写函数 fgetc和fputc fgets和fputs fscanf 和 fprintf 对比一组函数 fraed 和 fwriite 二.文件的随机读写函数 fseek 函数 三.关于文件结束的判定 总结 前言 接上一篇 C语言文件操作详情(一) 一.文件的顺序读写函数 fgetc和fputc fgetc字符输入函数 适用于所有输入流 fputc字符输出函数 适用于所有输出流 int fgetc( FILE *stream ); int fputc( int c,

  • C语言文件操作详情(一)

    目录 前言: 一.文件是什么 二.文件类型 三.文件缓冲区 四.文件指针 五.文件的打开和关闭 前言: 文件操作重要吗? 当然重要:如果我们想让自己的程序拥有记忆功能,那就需要把要记忆的信息和数据存入到一个外部文件里,以便下次提取. 一.文件是什么 磁盘上的文件是文件.但在程序设计中,我们一般谈的文件有两种:程序文件.数据文件 程序文件:包括源程序文件(后缀 .c),目标文件(后缀 .obj)可执行程序(windows环境后缀为 .exe). 数据文件:文件的内容不一定是程序,而是程序运行时读写

  • C语言常见的文件操作函数

    目录 一.文件的打开和关闭 1.文件指针 2.文件打开和关闭 二.文件的顺序读写 1.fgetc()和fputc()函数 2.fgets()和fputs()函数 3.fscanf()和fprintf()函数 4.fread()和fwrite()函数 三.文件的随机读写 1.fseek函数 2.ftell函数 3.rewind函数 四.文本文件和二进制文件 五.文件读取结束的判定 六.文件缓冲区 总结 一.文件的打开和关闭 1.文件指针 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存

  • 深入了解C语言中常见的文件操作方法

    目录 1.为什么使用文件 2.什么是文件 2.1文件分类 2.2 文件名 3.文件的打开和关闭 3.1文件指针 3.2 如何使用文件指针 4.文件的读写 1.为什么使用文件 大家在写程序的时候有没有一个困惑,就是我写的程序,输入一些数据后,当我把程序关掉以后数据就消失了.这是因为程序运行时,所有的数据都存储在内存中,当程序退出后,程序中的数据自然就不存在了.等下次再运行程序时,又要重新录入数据,非常难受 ​ 如何解决这个问题呢,我们可以学习使用文件来将其保存 2.什么是文件 2.1文件分类 在程

  • C/C++语言中的头文件汇总

    stdio.h就是指"standard input&output" 意思就是说标准输入输出头文件! 所以了,用到标准输入输出函数时,就要调用这个头文件 C/C++头文件 include <assert.h> //设定插入点 include <ctype.h> //字符处理 include <errno.h> //定义错误码 include <float.h> //浮点数处理 include <fstream.h> //

  • c语言中如何修改文件中间的几个字节

    fopen的打开模式 在C语言中文件打开方式有这么几种: r 以只读方式打开文件,只能读不能写,往文件中写是没有任何效果的 r+ 可以读,也可以写,文件打开的时候,指向文件开头,可以通过seek改变读写位置 w 这种方式打开的文件句柄,只能写,如果文件存在则将长度清零,否则新建文件,这种句柄通过seek之后,seek位置之前的文件数据全部变成0x00 w+ 同w选项,只不过多了一个可读功能 a 这种方式打开的文件,可以写,但是位置在文件末尾,即使往回seek也没有用,数据还是从文件末尾开始附加

  • R语言中常见的几种创建矩阵形式总结

    矩阵概述 R语言的实质实质上是与matlab差不多的,都是以矩阵为基础的 在R语言中,矩阵(matrix)是将数据按行和列组织数据的一种数据对象,相当于二维数组,可以用于描述二维的数据.与向量相似,矩阵的每个元素都拥有相同的数据类型.通常用列来表示来自不同变量的数据,用行来表示相同的数据. R中创建矩阵的语法格式 在R语言中可以使用matrix()函数来创建矩阵,其语法格式如下: matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimname

  • C语言中常见的几种流程控制语句

    目录 1.goto语句 2.if语句 3.switch语句 4.while循环 5.do...while循环 6.for循环 break和continue 总结 1.goto语句 goto语句是一种无条件转移语句,goto 语句的使用格式为: goto  语句标号; 其中语句标号是一个有效的标识符,这个标识符加上一个 ":" 一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句: 另外语句标号必须与goto语句同处于一个函数中,但可以不在一个循环层中:通常go

  • 深入学习C语言中常见的八大排序

    目录 冒泡排序 1.算法描述 2.动图展示 3.图解展示 4.代码实现 5.冒泡排序的优化 6.复杂度分析 插入排序 1.算法描述 2.动图展示 3.图解展示 4.代码实现 5.复杂度分析 希尔排序 1.算法描述 2.动图展示 3.图解展示 4.代码实现 5.复杂度分析 堆排序 1.算法描述 2.动图展示 3.图解展示 4.堆的一些基本性质 5.堆的构造 6.代码实现 7.复杂度分析 选择排序 1.算法描述 2.动图展示 3.图解展示 4.代码实现 5.复杂度 快速排序 1.算法简介 2.动图展

  • GO语言中常见的排序算法使用示例

    目录 快排 冒泡 选择排序 插入排序 希尔排序 二分法查找 快排 package main import ( "fmt" "math/rand" "time" ) func main() { li:=[]int{1,3,5,2,4,6,9,7} left:=0 right:=len(li)-1 fmt.Println(quick_sort(li,left,right)) } func quick_sort(li []int, left,right

  • C语言中的各种文件读写方法小结

    前言     找工作的时候,曾经用C语言练习过一段时间的算法题目,也在几个还算出名的OJ平台有过还算靠谱的排名.之前以为C语言只限于练习一下算法,但是工作中的一个问题解决让我意识到C语言的用处还是非常广泛的.下面介绍一下,如果用C语言来操作文件保存一个字符串,和读取一个字符串.算法中往往都是printf来打印出结果,但是真实工作中往往通过文件来进行一些持久化的存储工作. C-File I/O     文件的I/O操作是每一门语言的重点,因此这里我先来介绍一下如何用C语言去进行文件的I/O操作.

  • C语言中操作密码文件的一些函数总结

    C语言setpwent()函数:从头读取密码文件中的账号数据 头文件: #include <pwd.h> #include <sys/types.h> 定义函数: void setpwent(void); 函数说明:setpwent()用来将getpwent()的读写地址指回密码文件开头. 范例 #include <pwd.h> #include <sys/types.h> main() { struct passwd *user; int i; for(i

  • C语言中操作utmp文件的相关函数用法

    C语言getutent()函数:从utmp文件中取得账号登录数据 头文件: #include <utmp.h> 定义函数: struct utmp *getutent(void); 函数说明:getutent()用来从utmp 文件(/var/run/utmp)中读取一项登录数据, 该数据以utmp 结构返回. 第一次调用时会取得第一位用户数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL. utmp 结构定义如下: struct utmp { short int ut

随机推荐