【C语言复习】C语言中的文件操作

文章介绍了C语言中关于文件操作的基本概念,包括文件的分类(程序文件和数据文件)、数据文件的文本和二进制形式,以及文件操作的核心——文件指针。重点讲解了文件的打开与关闭函数(fopen和fclose),模式参数的意义,以及顺序读写和随机读写操作,如fgetc、fputc、fseek、ftell等功能函数的使用。同时强调了feof函数的正确使用场景来判断文件读取的结束。

写在前面

文件操作在C语言部分只是属于了解内容,但是因为它可能会应用在项目中,所以我把它单独写成一个小节。

文件操作

什么是文件

文件的分类

文件一般分为程序文件和数据文件。

  • 程序文件是包括源程序文件(后缀名.c),目标文件(windows环境下后缀名为.obj),可执行程序(windows环境下后缀名为.exe)
  • 数据文件是程序运行过程中需要从中读取数据的文件,或者程序运行中输出内容的文件

本小节文件操作,指的就是数据文件的操作。

根据数据在文件中的组织形式,数据文件又分为文本文件或者二进制文件。

数据在内存中以二进制的形式存储,如果不加转换的输出,就是二进制文件。如果要求在外存上以ASCII码的形式存储,就需要在存储前进行转换。以ASCII字符的形式存储的文件就是文本文件。

一个数据在内存中是怎么存储的呢? 字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。

如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而 二进制形式输出,则在磁盘上只占4个字节(VS2013测试)。

文件名

文件名是唯一的文件标识,包含三部分:文件路径,文件名主干,文件名后缀。

文件的操作

文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE

不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,

使用者不必关心细节。 一般都是通过一个FILE的指针来维护这个FILE结构的变量,使用起来更方便。

//创建FILE*指针变量
FILE* pf;

通过文件指针就可以找到与他相关联的文件。

文件的打开和关闭

文件在读写之前应该先打开,从而打开文件流,建立一个FILE类型的结构体,读写后应该关闭它。

因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。如果不关闭,就不会刷新C语言内部的缓冲区,从而导致读写出现问题。

//打开
FILE* fopen(const char* filename, const char* mode);
//关闭
int fclose(FILE* stream);
文件打开mode意义如果指定文件不存在
“r” (只读)为了输入数据,打开一个已经存在的文本文件(输入指的是 文件 -> 内存)出错
“w” (只写)为了输出数据,打开一个文本文件(输出指的是 文件 <- 内存)建立新文件
“a” (追加)文件尾部添加数据建立新文件
“rb” (只读)二进制的r出错
“wb” (只写)二进制的w建立新文件
“ab” (追加)二进制的a出错
“r+” (读写)为了读和写,打开一个文本文件出错
“w+” (读写)为了读和写,建立一个新文件新建
“a+” (读写)打开一个文件,在文件尾部进行读写新建
“rb+”(读写)为了读和写,打开一个二进制文件出错
“wb+”(读写)为了读和写,新建一个新的二进制文件建立
“ab+”(读写)打开一个二进制文件,在文件尾部进行读写建立新文件

文件的顺序读写

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

文件的随机读写

fseek

根据文件指针的位置和偏移量来定位文件指针。

可以修改文件指针的位置到任意位置,根据origin来选定文件起始或者是当前位置,根据偏移量修正位置,到任意位置处。

int fseek ( FILE * stream, long int offset, int origin );
ConstantReference position
SEEK_SETBeginning of file
SEEK_CURCurrent position of the file pointer
SEEK_ENDEnd of file *
ftell

前面fseek 是将文件指针移动至任意位置,ftell可以返回文件指针相对于起始位置的偏移量。

long int ftell ( FILE * stream );
rewind

让文件指针的位置回到文件的起始位置。

void rewind ( FILE * stream );
feof

注意,在文件读取过程中,不能用feof 函数的返回值来判断文件是否结束。feof 使用场景是,当文件读取结束的时候,feof 判断是读取失败结束的,还是遇到文件尾部结束的。

所以正确的读取判断文件结束的方法:

  • 文本文件读取是否结束,判断返回值是否为 EOF (对fgetc),或者 NULL (对fgets)
  • 二进制文件的读取结束判断返回值是否小于实际要读取的个数。(fread)

文件操作小节完。主要掌握的还是如何使用文件操作函数。

源码直接下载地址: https://pan.quark.cn/s/d280357b18e5 在网页构建领域中,HTML5被视为当代网页工程的基础规范,其问世显著增强了页面的视觉表现力与用户互动性。本工程致力于运用HTML5技术开发一个电视剧信息展示页面,目的是呈现诸如剧名、演员构成、故事梗概等电视剧关键资料。接下来将深入阐释如何借助HTML5的结构化组件和样式管理功能达成此项目目标。 我们必须掌握HTML5的核心框架。一个规范的HTML5文档一般包含`<!DOCTYPE html>`声明、`<html>`根标记、`<head>`头部标记和`<body>`主体标记。在头部区域,可以配置网页的基本元数据,例如字符集设定、页面标题等。在主体部分,将具体构建电视剧信息列表的内容。 电视剧展示页面通常包含多个条目,每个条目对应一部电视剧。HTML5中的`<section>`标记用于内容模块化,适合表示单个电视剧的详细信息区域。每个`<section>`内部,可使用`<h2>`标题标记显示剧名,`<img>`图像标记插入宣传剧照,`<p>`段落标记呈现剧情介绍,而`<ul>`无序列表与`<li>`列表项标记则用于罗列演员阵容。 为了优化页面布局,需要借助CSS(层叠样式表)进行样式管理。HTML5引入了创新的CSS选择器与布局模型,例如Flexbox和Grid,使页面布局更加灵活多变。在此场景下,可以利用Flexbox为电视剧信息列表实现自适应布局,保障在不同设备尺寸下均能呈现理想视觉效果。具体操作时,可将`<section>`标记设定为Flex容器,通过`display: flex;`属性,并运用`justify-content`和`align-items`属性调整子元素的对...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值