广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言文件操作详解
  • 679
分享到

C语言文件操作详解

2024-04-02 19:04:59 679人浏览 独家记忆
摘要

目录一、什么是文件二、文件缓冲区三、文件指针四、文件的打开和关闭。总结一、什么是文件 在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。 程序文件: 包括源程序文件(后缀为.

一、什么是文件

在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。

程序文件:

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

数据文件:

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

或者输出内容的文件。

数据文件又分为”文本文件“和”二级制文件

二进制文件:数据在内存中以二进制的形式存储,如果不加转换的输出到外存,这种文件我们是看不懂的是一堆乱七八糟的符号,只有电脑才可以读懂。

文本文件:如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式

存储的文件就是文本文件。这种文件我们是看得懂的,例如我们在记事本看到的”字“”字母“”数字“,这样的文件就是文本文件。

二、文件缓冲区

ANSIC采用”缓冲文件系统“来处理数据文件,系统会为每一个正在使用的文件开辟一块”文件缓冲区“。当程序从内存向磁盘输出数据时,会将数据先送到输出缓冲区中,等输出缓冲区满了之后,才将数据一起送到磁盘;当程序从磁盘向内存读数据时,数据会先被送到输入缓冲区,等输入缓冲区满了之后,才将数据一起送到磁盘;另外程序结束时,缓冲区的内容也会被送到内存或磁盘。

三、文件指针

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的

名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是

由系统声明的,取名FILE。

该结构体声明如下:


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

每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,我们就可以通

过创建一个FILE的指针来维护这个FILE结构的变量。


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

四、文件的打开和关闭。

文件的打开用fopen函数,文件的关闭用fclose函数。

它们的原型如下:

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

int fclose ( FILE * stream );

filenname:这个参数填的是文件名

mode:这个参数代表要对文件进行的操作

stream:这个参数代表指向要关闭的文件的指针。

文件的操作方式有:

“r”(只读):程序从一个文本文件读入数据,如果指定文件不存在会出错 。

“w”(只写):程序向一个文本文件输出数据,如果指定文件不存在会建立一个新的文件。

“a”(追加): 向文本文件尾添加数据 ,如果指定文件不存在会出错

“rb”(只读): 程序从一个文件读入数据,只不过这个文件是二进制文件,如果指定文件不存在会出错 。

“wb”(只写): 程序向一个文件输出数据,只不过这个文件是二进制文件 ,如果指定文件不存在会建立一个新的文件

“ab”(追加): 向一个二进制文件尾添加数据,,如果指定文件不存在会出错

“r+”(读写): 为了读和写,这个文件是文本文件,如果文件不存在会出错

“w+”(读写): 为了读和写,如果文件不存在会建立一个新的文件

“a+”(读写): 打开一个文件,在文件尾进行读写 ,如果文件不存在会建立一个新的文件

“rb+”(读写) :为了读和写,打开一个二进制文件 ,如果文件不存在会出错

“wb+”(读写) :为了读和写一个二进制文件 ,如果文件不存在会建立一个新的文件

“ab+”(读写):在 二进制文件尾进行读和写 如果文件不存在会建立一个新的文件

文件的读写函数有(这些函数是顺序读写):

字符输入函数:fgetc
字符输出函数:fputc
文本行输入函数:fgets
文本行输出函数:fputs
格式化输入函数:fscanf
格式化输出函数:fprintf
二进制输入:fread
二进制输出:fwrite

下面我们用代码来体会:


int main()
{
	//打开文件
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
        //如果没有读到,返回错误信息。
		perror("fopen");
		return -1;
	}
	//读文件
	// 
	//关闭文件
	fclose(pf);
	pf = NULL;
 	return 0;
}

我们对data.txt,进行”r“(读)操作,因为当前文件夹下没有创建这个文件,所以出错。

现在我们在当前目录下,创建一个diata.txt文件夹,并输入字符"abcd",使用fgetc函数来读取数据,这个函数的作用是读取一个字符后,指针往下一个字符走。


int main()
{
	//打开文件
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return -1;
	}
	//读文件
	char ch = fgetc(pf);
	printf("%c\n", ch);
	ch = fgetc(pf);
	printf("%c\n", ch);
	//关闭文件
	fclose(pf);
	pf = NULL;
 	return 0;
}

结果为:

这是因为刚刚开始时,pf指针首先指向首字符”a“,读完字符”a“后,pf指针就往下一个字符走,指向了字符”b“,读完”b“后,pf指针继续往下一个字符走,指向了字符”c“。

现在使用fgetc函数来读取数据,这个函数的作用是读取一个字符串


int main()
{
	//打开文件
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return -1;
	}
	//读文件
	char arr[20] = { 0 };
	fgets(arr, 20, pf);
	printf("%s", arr);
	//关闭文件
	fclose(pf);
	pf = NULL;
 	return 0;
}

结果是:

这个代码的意思是从pf指向的那个文件读取20个字符,存到数组arr中,我们知道文件只有4个字符,所以当文件不够要被读取字符数,程序就只会把文件中的内容读完,而不会报错。

下面我们进行”w“操作,并分别使用fputc、fputs函数

fputc函数


int main()
{
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//写文件
	fputc('b', pf);
	fputc('i', pf);
	fputc('t', pf);
  	//关闭文件
	fclose(pf);
	pf = NULL;
 	return 0;
}

我们向test.txt文件进行写操作,如果我们对一个文件进行写操作,如果这个文件存在,且有内容,写操作会将文件的内容销毁,重新写入目前我们要写的内容。因为我们当前文件夹下没有创建这样的文件,所以程序自动帮我们创建,我们使用fputs函数,这个函数的作用是向文件写入一个字符,在这些代码中,我们分别写了”b“、”i“、”t“这几个字符

fputs函数


int main()
{
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//写文件
	//写一行数据
	fputs("hello world\n", pf);
	fputs("hello bit\n", pf);
 	//关闭文件
	fclose(pf);
	pf = NULL;
}

fputs函数的作用是向文件输出一个字符串。因为这个文件在之前已经创建,且有字符”bit“,现在我们重新进行写操作,字符”bit“会被销毁,重新写入hello world、hello bit这两个字符串。

fprintf函数


struct S
{
	int n;
	double d;
};
 int main()
{
	struct S s = { 100, 3.14 };
 	FILE* pf = fopen("data.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//写文件
	fprintf(pf, "%d %lf", s.n, s.d);
 	//关闭文件
	fclose(pf);
	pf = NULL;
}

fprintf函数的作用是向pf指向的那个文件输出格式化字符(所谓的格式化就是类似于代码中"%d %lf"的格式),所以这个程序会向文件输出”100“和”3.140000“.

fscanf函数


struct S
{
	int n;
	double d;
};
int main()
{
	struct S s = { 0 };
	FILE* pf = fopen("data.txt", "r");
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//读文件
	fscanf(pf, "%d %lf", &(s.n), &(s.d));
 	printf("%d %lf\n", s.n, s.d);
 	//关闭文件
	fclose(pf);
	pf = NULL;
}

fscanf函数的作用是从文件中读取格式化数据,存到内存中,由是一个代码只,文件中有”100“和”3.140000“这两个数据,所以这个程序会将这两个数据读到结构体变量s中.

最后两个函数使用方法与fgetc fputc fgets fputs函数类似,我就不示例了,同学们自己来试试吧!!!!!

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C语言文件操作详解

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言文件操作详解
    目录一、什么是文件二、文件缓冲区三、文件指针四、文件的打开和关闭。总结一、什么是文件 在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。 程序文件: 包括源程序文件(后缀为....
    99+
    2022-11-12
  • 详解C语言之文件操作(上)
    目录什么是文件程序文件数据文件文件名文件类型文件缓冲区文件指针 文件的打开和关闭输入和输出总结什么是文件 磁盘上的文件就是文件。 在程序设计中,我们一般谈的文件有两种:程序...
    99+
    2022-11-12
  • 详解C语言之文件操作下)
    目录文件的随机读写fseek函数ftell函数rewind函数文件结束判定feof函数和ferror函数总结文件的随机读写 之前的函数只能实现顺序读写,而实现随机读写需用fseek函...
    99+
    2022-11-12
  • C语言中的文件操作详解
    目录1.为什么使用文件2.什么是文件2.1程序文件2.2数据文件2.3文件名3.文件的打开和关闭3.1文件指针3.2文件的打开和关闭4.文件的顺序读写5.文件的随机读写5.1fsee...
    99+
    2022-11-13
  • C语言进阶之文件操作详解
    目录0. Intro1. 文件名2. 文件的打开和关闭2.1 文件指针2.2 打开和关闭文件3. 文件顺序读写3.1 利用以上函数实现拷贝文件操作3.2 二进制的读写3.3 格式化输...
    99+
    2022-11-13
  • C语言文件操作详情(一)
    目录前言:一、文件是什么二、文件类型三、文件缓冲区四、文件指针五、文件的打开和关闭前言: 文件操作重要吗? 当然重要:如果我们想让自己的程序拥有记忆功能,那就需要把要记忆的信息和数据...
    99+
    2022-11-13
  • C语言文件操作详情(二)
    目录前言一、文件的顺序读写函数fgetc和fputcfgets和fputsfscanf 和 fprintf对比一组函数fraed 和 fwriite二、文件的随机读写函数fseek ...
    99+
    2022-11-13
  • C语言文件操作之fread函数详解
    目录前言一、fread 函数二、缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 )三、处理乱码问题四、记录读取的字节个数五、读取到 0 字节的情况六、读取完毕...
    99+
    2022-11-13
  • C语言超详细讲解文件的操作
    目录一、为什么使用文件二、什么是文件1.程序文件2.数据文件3.文件名三、文件指针四、文件的打开和关闭五、文件的顺序读写六、文件的随机读写fseekftellrewind七、文件结束...
    99+
    2022-11-13
  • 一文详解C语言操作符
    目录一、基础篇1.算数操作符2.单目操作符3.逻辑操作符4.条件操作符5.逗号表达式6.下标引用,函数调用和结构体成员访问7.关系操作符 二、进阶篇1.二进制2.移位操作符...
    99+
    2023-05-20
    C语言操作符详解 C语言操作符
  • C语言文件操作详解以及详细步骤
    目录一、为什么使用文件?二、什么是文件?1.程序文件2.数据文件3.文件名三、文件的打开和关闭1.文件指针2.文件的打开和关闭3.文件的顺序读写四、fseek函数五、ftell函数六...
    99+
    2022-11-13
  • C语言文件操作的入门详解教程
    目录一.一些需要掌握的知识点1.文件名2.文件类型3.数据流4.文件缓冲区5.文件指针二.与文件操作相关的一些函数 1.文件的打开及关闭2.文件的顺序读写3.文件的随机读写...
    99+
    2022-11-12
  • C语言中炫酷的文件操作实例详解
    目录什么是文件程序文件数据文件 (本文重点)文件名文件的打开和关闭文件指针文件函数相对路径与绝对路径输入输出流二进制读写fwirtefread总结什么是文件 磁盘上的文件是文件 但是...
    99+
    2022-11-12
  • C语言文件操作分析
    本篇内容介绍了“C语言文件操作分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!文件的随机读写之前的函数只能实现顺序读写,而实现随机读写需用...
    99+
    2023-06-25
  • 详解C语言之操作符
    目录1.加减乘2.除(/)注意:3.取余(%)注意:4.移位操作符(>> <<)注意5.位操作符(| ,& ,^)6.逻辑操作符(&&...
    99+
    2022-11-12
  • C语言超详细文件操作基础下篇
    目录一、文件的顺序读写1.格式化的输出函数(fprintf)2.格式化的输入函数(fscanf)3.二进制读写1.二进制输出函数(fwrite)2.二进制输入函数3.scanf,fs...
    99+
    2022-11-13
  • C语言超详细文件操作基础上篇
    目录一、为什么使用文件二、什么是文件1.什么是数据文件2.什么是程序文件3.文件名三、文件的打开和关闭1 文件指针:2.打开和关闭文件函数(1)打开文件函数:(2)关闭文件函数四、文...
    99+
    2022-11-13
  • C语言实现对文件进行操作的示例详解
    目录前言文件指针文件的打开和关闭文件的打开方式文件读写函数二进制方式存储文件对文件进行拷贝文件随机读写函数文件缓冲区前言 文件操作 在运行程序的时候,此时数据是存放在内存中,当程序退...
    99+
    2023-05-15
    C语言实现文件操作 C语言文件操作 C语言文件
  • 【c语言进阶】文件操作(上)
    🚀write in front🚀 📜所属专栏:> c语言学习 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:...
    99+
    2023-09-09
    c语言 数据库 java
  • C语言全面细致讲解文件操作
    目录什么是文件程序文件数据文件文件名文件指针文件的打开和关闭文件的顺序读写字符输入输出函数字符串输入输出函数(fgets,fputs)格式化输入输出函数(fscanf,fprintf...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作