【C语言进阶】文件操作

前言

 语言中的文件操作是编程中非常重要的一部分,它允许程序与外部数据进行交互,如读取用户输入的数据、保存程序生成的结果到文件中,或者修改现有文件的内容。C语言通过一系列的标准库函数来支持文件操作,这些函数定义在<stdio.h>头文件中。

一、文件概念

1.1 文件的作用

 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使用文件。

1.2 文件分类

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

1.2.1 程序文件

程序文件,也被称为可执行文件或代码文件,是包含了一系列指令(代码)的文件,这些指令可以被计算机的处理器(CPU)执行以完成特定的任务或功能。程序文件通常是用高级编程语言(如C、C++、Java、Python等)编写的,然后经过编译器或解释器转换成计算机可以直接执行的机器语言或字节码。

程序文件的主要特点包括:

  • 包含可执行的代码。
  • 通常具有特定的文件扩展名,如.exe(Windows可执行文件)、.com(旧式DOS可执行文件)、.bat(批处理文件)、.py(Python脚本文件,需要解释器执行)、.jar(Java归档文件,包含Java字节码)等。
  • 不能直接被用户编辑(除非使用相应的源代码编辑器并重新编译或解释)。
  • 执行时,程序文件会加载到内存中,CPU按照程序中的指令序列执行操作。

1.2.2 数据文件

数据文件是存储了数据(如文本、数字、图像等)的文件,这些数据可以被程序读取、修改、添加或删除。数据文件不包含可执行代码,而是作为程序运行的输入或输出。数据文件可以是任何类型的文件,包括但不限于文本文件、图像文件、音频文件、视频文件、数据库文件等。

数据文件的主要特点包括:

  • 存储数据,不包含可执行的代码。
  • 可以是多种格式,包括文本(.txt)、CSV(.csv,逗号分隔值)、JSON(.json,JavaScript对象表示法)、XML(.xml,可扩展标记语言)、数据库文件(如.db、.sqlite等)等。
  • 可以被程序读取和写入,作为程序运行的输入或输出。
  • 用户可以直接查看或编辑数据文件(使用相应的编辑器或查看器)。

下面将主要探讨数据文件。
 通常我们所处理数据的输⼊输出都是以终端为对象的,即从终端的键盘输⼊数据,运行结果显示到显示器上。
 其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使⽤,这⾥处理的就是磁盘上⽂件

1.2.3 文件名

在这里插入图片描述

1.2.4 二进制文件与文本文件

根据数据的组织形式不同,数据文件被分为二进制文件和文本文件。
 数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。
 如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件。
⼀个数据在⽂件中是怎么存储的呢?
字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储。
例如,整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占⽤5个字节(每个字符⼀个字节),而⼆进制形式输出,则在磁盘上只占4个字节(VS2019测试)。
在这里插入图片描述
测试:

int main()
{
   
   
	int a = 10000;

	FILE* pf = fopen("test.txt", "wb");
	fwrite(&a, 4, 1, pf);
	fclose(pf);
	pf = NULL;

	return 0;
}

使用VS打开二进制文件
在这里插入图片描述
在这里插入图片描述

二、文件操作

2.1 文件的打开与关闭

2.1.1 文件指针

 **在C语言中,文件是通过文件指针来访问的。**文件指针是一个指向FILE类型的指针,FILE是在<stdio.h>中定义的一个结构体类型,用于表示一个打开的文件。文件指针用于存储文件的相关信息,如文件的位置、状态等。
例如,VS编译环境中提供的<stdio.h> 头文件中的文件类型申明:

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

2.1.2 打开文件

在C语言中,使用fopen函数来打开文件。fopen函数的原型如下:

FILE *fopen(const char *filename, const char *mode)
评论 31
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值