当前位置: 首页 > news >正文

C语言⽂件操作讲解(1)

目录

前言

一、为什么使用文件

介绍

二、什么是⽂件

介绍

文件的核心特点:

1.程序⽂件

2.数据⽂件

数据文件的核心作用

数据文件的常见类型

三、⼆进制⽂件和⽂本⽂件

介绍

字符与ASCII码对应表

总存储大小

四、⽂件的打开和关闭

介绍

  1.流和标准流

三大标准流及其作用

核心特点

  2.⽂件指针

3.⽂件的打开和关闭函数介绍:

(1)fopen函数

(2)fclose函数

返回值

总结


前言

  本篇文章将讲解为什么使⽤⽂件、什么是⽂件、⼆进制⽂件和⽂本⽂件、⽂件的打开和关闭、⽂件的顺序读写、⽂件的随机读写、⽂件读取结束的判定、⽂件缓冲区等知识的相关内容,   为本章节知识的内容。

一、为什么使用文件

介绍

  我们写的程序数据是存储在电脑的内存中,程序退出后内存会回收数据就丢失了,再次运行无法观察到上一次的数据,而文件是存在硬盘中,即使电脑关机文件也不会丢失,所以我们需要使用文件来将数据进⾏持久化的保存。

二、什么是⽂件

介绍

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

文件的核心特点:

  • 持久性:数据保存在外部存储中,程序退出后不会丢失。
  • 有序性:数据以字节流形式存储,可按顺序或随机访问。
  • 可操控性:支持创建、读取、写入、修改、删除等操作。

1.程序⽂件

  程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows 环境后缀为.exe)。

例:

2.数据⽂件

  ⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。(C语言文件讨论的是数据⽂件)

数据⽂件讲解:

数据文件的核心作用

程序通过数据文件实现数据持久化数据共享

  • 持久化:程序运行时产生的临时数据(如计算结果、用户信息)可写入数据文件,下次运行时直接读取,无需重复生成。
  • 共享性:多个程序可通过读写同一数据文件交换信息(如日志文件、配置文件)。

数据文件的常见类型

  根据存储格式,数据文件可分为两类:

分类存储方式特点典型场景
文本数据文件以ASCII字符编码存储可读性强(可用记事本打开),占用空间较大日志文件(.log)、配置文件(.ini
二进制数据文件按内存中的二进制格式直接存储占用空间小、读写速度快,不可直接阅读图片(.jpg)、数据库文件(.db

三、⼆进制⽂件和⽂本⽂件

介绍

  根据数据的组织形式,数据⽂件被分为⽂本⽂件和⼆进制⽂件(二、中也有介绍)。 数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。 如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件。

  那么⼀个数据在⽂件中是怎么存储的呢?

先给结论:

字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储。(如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占⽤5个字节(每个字符⼀个字节),⽽ ⼆进制形式输出,则在磁盘上只占4个字节。)

  对: 如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占⽤5个字节(每个字符⼀个字节),⽽ ⼆进制形式输出,则在磁盘上只占4个字节。

图示:

  作图有些糙,见谅,若以⼆进制形式存储,则按内存中的二进制格式直接存储,所以不详细讲解,

讲一下ASCII码的形式存储:

“10000”以ASCII形式存储时,每个字符对应一个ASCII码值,存储为1字节(8位二进制)。具体如下:

字符与ASCII码对应表

字符ASCII码值(十进制)二进制存储形式
'1'4900110001
'0'4800110000
'0'4800110000
'0'4800110000
'0'4800110000

通过这个表,可知列出图的那些值。

总存储大小

“10000”共5个字符,每个字符占1字节,因此总大小为 5字节(5B)。

四、⽂件的打开和关闭

介绍

  1.流和标准流

首先对流讲解:

简单来说:

  我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。

C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。 ⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。

标准流:

在C语言中,标准流是程序与外部环境进行输入输出的默认通道,由标准库自动管理,无需手动打开或关闭。

三大标准流及其作用

流名称文件指针功能描述默认设备
标准输入流stdin程序读取外部输入的通道键盘
标准输出流stdout程序输出普通信息的通道显示器(终端窗口)
标准错误流stderr程序输出错误信息的通道显示器(终端窗口)

注意:C语⾔程序在启动的时候,默认打开了这3个流

核心特点

  1. 自动关联:程序启动时系统自动创建这三个流,可直接通过 stdin/stdout/stderr 指针操作。
  2. 缓冲机制
    • stdout行缓冲(遇到换行符 \n 或缓冲区满时输出)。
    • stderr无缓冲(错误信息立即输出,不等待缓冲)。
    • stdin行缓冲(读取到换行符时结束输入)。
  3. 重定向支持:可通过操作系统命令将流重定向到文件或其他设备(如 ./a.out > output.txt 将 stdout 输出到文件)。

    记:这三个流这是默认打开的,我们使⽤scanf、printf等函数就可以直接进⾏输⼊输出操作的。 stdin、stdout、stderr 三个流的类型是: FILE * ,通常称为⽂件指针。 C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作的。

  2.⽂件指针

  缓冲⽂件系统中,关键的概念是“⽂件类型指针”,简称“⽂件指针”。 每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息(如⽂件的名 字,⽂件状态及⽂件当前的位置等)。这些信息是保存在⼀个结构体变量中的。该结构体类型是由系统声明的,取名FILE.

  在C语言中,文件指针是用于操作文件的核心工具,本质是指向 FILE 结构体的指针,通过它可以访问文件的状态信息(如当前位置、缓冲区、读写模式等)。

声明格式:

FILE* p;       // ⽂件指针变量

  定义p是⼀个指向FILE类型数据的指针变量。可以使pf指向某个⽂件的⽂件信息区(是⼀个结构体变 量)。通过该⽂件信息区中的信息就能够访问该⽂件。也就是说,通过⽂件指针变量能够间接找到与其关联的⽂件。

3.⽂件的打开和关闭函数介绍:

首先:

1.⽂件在读写之前应该先打开⽂件,在使⽤结束之后应该关闭⽂件

2.在编写程序的时候,在打开⽂件的同时,都会返回⼀个FILE*的指针变量指向该⽂件,也相当于建⽴了指针和⽂件的关系。

3.记:规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。

(1)fopen函数

函数形式:

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

介绍:

功能: fopen 函数是⽤来打开参数后续对流的操作是通过 filename 指定的⽂件,同时将打开的⽂件和⼀个流进⾏关联, fopen 函数返回的指针来维护。具体对流(关联的⽂件)的操作是通过参数 mode 来指定的。

参数:

  1. filename :表⽰被打开的⽂件的名字,这个名字可以绝对路径,也可以是相对路径。
  2. mode :表⽰对打开的⽂件的操作⽅式,具体⻅下⾯的表格。

返回值:

  1. 若⽂件成功打开,该函数将返回⼀个指向FILE 对象的指针,该指针可⽤于后续操作中标识对应的流。
  2. 若打开失败,则返回 NULL 指针,所以⼀定要fopen 的返回值做判断,来验证⽂件是否打开成功。

mode参数:

详略来说:

r文本文件的只读取
w文本文件的只写入
a文本文件的追加(用的少)
rb二进制文件的只读取
wb二进制文件的只写入
ab二进制文件的追加 (用的少)

细说:

  1. r与rb读取的文件,如果不存在,则会报错的。
  2. w与wb写入的文件,如果不存在,则会创建一个该文件名的文件进行写入,但写入的数据会覆盖原来的数据。

代码例子:

#include<stdio.h>
#include<stdlib.h>
int main()
{FILE *p=fopen("date.txt","w");fclose(p);
}

fclose下面会讲解。

(2)fclose函数

函数形式:

int fclose ( FILE * stream );

介绍:

功能:fclose函数是⽤来关闭参数 stream 关联的⽂件,并取消其关联关系。与该流关联的所有内部缓冲区均会解除关 联并刷新:任何未写⼊的输出缓冲区内容将被写⼊,任何未读取的输⼊缓冲区内容将被丢弃。

参数讲解:

  • stream:指向 FILE 结构体的指针,即需要关闭的文件流(如通过 fopen 打开的文件)。

返回值

  • 成功:返回 0
  • 失败:返回 EOF(通常为 -1),并设置 errno 以指示错误原因(如文件写入错误)。

举例子:

#include<stdio.h>
#include<stdlib.h>
int main()
{FILE *p=fopen("date.txt","w");int i= fclose(p);printf("%d",i);
}

总结

  以上就是今天要讲的内容,本篇文章涉及的C语言⽂件操作讲解的知识点为:为什么使⽤⽂件、什么是⽂件、⼆进制⽂件和⽂本⽂件、⽂件的打开和关闭知识的相关内容,为本章节知识的内容,希望大家能喜欢我的文章,谢谢各位,接下来的内容我会很快更新。

http://www.dtcms.com/a/406990.html

相关文章:

  • 记录commandlinerunner错误解决
  • Next.js + TanStack Query 架构中三种常见的数据请求模式
  • ISO 雨晨 26200.6588 Windows 11 企业版 LTSC 25H2 自用 edge 140.0.3485.81
  • 企业手机app开发公司网站优化策划方案
  • 建网站的免费空间百度检索入口
  • 厦门品牌网站建设丽水市住房和城乡建设局网站
  • EsModule和Common.js区别
  • [Vue warn]: Error in mounted hook: “ReferenceError: Jessibuca is not defined“
  • Linux 修炼:进程控制(一)
  • 如何把代码放在网站首页教程门户网站开发如何提高产品排名
  • 建设网站公司招聘做非法网站要多少钱
  • 网站标题权重云建站不能用了吗
  • Python快速入门专业版(四十六):Python类的方法:实例方法、类方法、静态方法与魔术方法
  • 嵌入式 - 内核驱动2 - 实现设备驱动
  • 做机械设计的网站长沙网站推广
  • 景泰做网站wordpress资源分享
  • Vue 3 中的事件总线
  • OCR 如何精准识别越南身份证?
  • FPGA自学笔记--VIVADO FIFO IP核控制和使用
  • 张家界官方网站查询网ip138子域名
  • 【通信】无线PA 释义
  • 襄阳做公司网站的软件公司建立个人网站能赚钱吗
  • 赛迪顾问《2025中国虚拟化市场研究报告》解读丨虚拟化市场迈向“多元算力架构”,国产化与AI驱动成关键变量
  • 汕头公众号建设网站北京模板开发建站
  • 【Linux】UDP 网络编程
  • Redis 键空间 五大类型
  • seata部署与集成
  • ORM框架Java持久化层使用手册(mybatis,mybatisplus,jpa等)
  • 大型企业网站建设方案seo排名优化软件有用
  • 数据驱动下的高维数据破局术:降维处理的技术实战、选型指南与方法论沉淀