文件的介绍

简介: 文件的介绍

文件介绍

文件计算机中用于存储数据的一种载体。一般储存在磁盘上。

文件通常以一定的格式和结构存储数据,可以包含文本、图像、音频、视频等各种类型的信息。

文件可以通过文件系统进行管理和组织,用户可以对文件进行创建、打开、编辑、保存、复制、移动、删除等操作。

常见的文件格式包括txt、docx、pdf、jpg、mp3等。

文件在计算机中起着非常重要的作用,是信息传递和存储的基本单位。

在程序设计中,我们把文件一般分为两类,一类是程序文件,一类是数据文件

程序文件

程序文件包含源代码文件,目标文件,可执行代码。

源代码文件

通常以常见的编程语言编写,如C、C++、Java、Python等,程序员可以通过编辑源代码文件来编写和修改程序。一旦源代码文件完成编写,程序员需要将其编译成可执行文件,以便计算机能够运行程序。

目标文件

是编译器生成的中间文件,其中包含了源代码文件编译后的目标代码。目标文件通常是编译过程的中间产物,它包含了程序的机器代码、符号表、重定位信息等。目标文件是编译器将源代码文件转换为可执行文件的重要步骤之一。

可执行文件

是经过编译或打包处理后的程序文件,其中包含了计算机可以直接执行的机器指令。用户可以直接运行可执行文件,而无需查看或修改其中的源代码。程序文件在计算机中扮演着至关重要的角色,是实现各种功能和任务的基础。

数据文件

我们要对一个文件执行操作的时候,一般的步骤就是:1.打开文件 2.执行操作 3.关闭文件

在这个过程中我们实际上操作对象是数据文件

根据数据的组织形式,我们一般把文件分为文本文件和二进制文件

文本文件

就是在外显的时候通过ASCII转换成文本信息的文件。

二进制文件

就是在内存中以二进制形式存储的文件。

举例,我们通过记事本来查看一个文件,当我们打开一个文本文件的时候,它的显示是这样的:

在内存中它以二进制存储,但是在需要显示的时候,它转换成了通过ASCII表转换而成的字符串;

而当我们打开一个二进制文件的时候,它的显示是这样的:

这是乱码,也就是说二进制文件并不会通过ASCII来转换成我们能看懂的形式,那么它就会显示乱码。

由于二进制文件中的数据以二进制形式存储,因此通常无法直接通过文本编辑器等工具进行查看或编辑。需要特定的程序或工具来处理和解析二进制文件。二进制文件在计算机中广泛应用,是存储和传输各种类型数据的重要形式。

在我们打开和关闭文件的时候,存在一种抽象的概念——流(stream)

针对不同的输入和输出通道,程序员不可能将每个传输设备和操作都熟记于心,于是出现了流(stream)。流可以帮助程序员用于在程序中对文件进行输入和输出的操作。

它可以看作程序与文件之间的通道,通过流可以实现数据的读取和写入。把文件看作一个生产车间,我们提供原材料和获取产物都需要通过通道来获得,这个通道就是流。

而流作为抽象的概念,我们是感受不到的,但是在我们操作的时候,它会默认打开。

流可以分为输入流和输出流两种类型:

  • 输入流(input stream)用于从文件中读取数据到程序中。
  • 输出流(output stream)用于将程序中的数据写入到文件中。

标准流

标准流是指在计算机程序中用于输入和输出的预定义流。在大多数操作系统和编程语言中,通常有三种标准流:

- 标准输入流(stdin):用于接收程序的输入数据。

- 标准输出流(stdout):用于向用户显示输出数据。

- 标准错误流(stderr):用于向用户显示错误信息。与标准输出流不同的是,标准错误流通常用于显示程序运行时的错误信息,而不会影响程序的正常输出。

文件指针

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

但我们需要调用该文件的时候,就需要用到文件指针FILE*来使用文件。

有关文件的函数

打开与关闭文件

fopen和fclose

文件在读写之前需要打开文件;读写完成后需要关闭文件。

f指的是file,后续就是指操作。

fopen

注意其中一个参数:const char* mode,表示文件的打开方式。例如

具体可以参见这篇博文:C语言文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析_c语言w+-CSDN博客

fclose

代码实操:

1. /* fopen fclose example */
2. #include <stdio.h>
3. int main ()
4. {
5.  FILE * pFile;
6. //打开⽂件
7.  pFile = fopen ("myfile.txt","w");
8. //⽂件操作
9. if (pFile!=NULL)
10.  {
11.  fputs ("fopen example",pFile);
12. //关闭⽂件
13.  fclose (pFile);
14.  }
15. return 0;
16. }

文件的顺序读写

顺序读写是指按照文件中数据的顺序依次读取或写入数据,文件指针依次移动到下一个位置。

注:

1.针对fprintf如果需要打印在屏幕上,则第一个参数使用stdout,需要打印在文件中,则第一个参数使用文件名。

文件的随机读写

随机读写是指按照指定的位置读取或写入文件中的数据, 文件指针可以不受数据顺序的控制,访问特定的数据。

fseek

fseek的作用是根据文件指针的位置和偏移量来定位文件指针

stream:指向文件的指针

offset:偏移量,用于指定对于origin的位置

origin:偏移起始位置

具体可以为以下三种:

在使用fseek函数时,需要注意以下几点:

  1. fseek函数返回值为0表示操作成功,非0表示失败。
  2. offset为正数表示向文件末尾方向偏移,负数表示向文件开头方向偏移。
  3. 使用fseek函数后,需要检查返回值以确保文件指针移动成功。
  4. 在写操作前使用fseek函数移动文件指针,可以实现随机写入数据的功能。

ftell

ftell的作用是返回文件指针相对于初始位置的偏移量

在使用ftell函数时,需要注意以下几点:

  1. 返回值为当前文件指针相对于文件开头的偏移量,如果操作成功返回非负值,如果失败返回-1。
  2. ftell函数通常与fseek函数配合使用,可以实现定位文件指针到特定位置后获取当前位置的功能。
  3. 当进行读写操作时,可以使用ftell函数获取当前文件指针的位置,以便记录或处理文件操作的位置信息。

rewind

rewind的作用是让文件指针回到初始位置

在使用rewind函数时,需要注意以下几点:

  1. rewind函数将文件指针设置为文件的起始位置,即相当于调用fseek(stream, 0, SEEK_SET)
  2. 通常在重新读取文件内容之前,可以使用rewind函数将文件指针重新指向文件开头。
  3. rewind函数不返回任何值,只是将文件指针移动到文件开头,并且不会检查是否移动成功。

文件读取结束的判定

feof

判断是否是遇到文件末尾而结束.若错误则返回非0值,否则返回0

ferror

判断是否是遇到错误而结束,若错误则返回非0值,否则返回0

文件缓冲区

在C语言中,文件缓冲区是指用于存储文件数据的内存区域。磁盘读取数据时,数据会先进入到文件缓冲区,装满缓冲区之后再一起送到磁盘上。

文件缓冲的过程可以理解为泄洪——当积蓄了一定的水量时,打开出口让水出去

文件缓冲区主要有以下两种类型:

1. **全缓冲**:当使用标准I/O库函数(如`fread`、`fwrite`、`fscanf`、`fprintf`等)读取或写入文件时,默认情况下是全缓冲的。这意味着数据会先被读取到内存缓冲区中,当缓冲区满了或者遇到换行符时才会将数据写入文件。全缓冲可以减少I/O操作的次数,提高效率。

2. **行缓冲**:当使用标准I/O库函数操作终端设备(比如键盘输入和屏幕输出)时,默认是行缓冲的。这意味着数据会先被读取到内存缓冲区中,直到遇到换行符或缓冲区满了才会将数据写入终端设备。行缓冲可以提高交互性,因为用户可以在输入一行后按下回车键才将数据发送到程序。

设置文件的缓冲,可以根据实际需求来提高文件操作的效率和交互性。

目录
相关文章
|
安全 前端开发 数据安全/隐私保护
【教程】移动应用安全加固技术解析
【教程】移动应用安全加固技术解析
|
机器人 芯片
ChatGPT提问技巧——对话提示
ChatGPT提问技巧——对话提示
1214 8
|
10月前
|
人工智能 API 云计算
DeepSeek在Lobechat的使用
本文介绍了如何快速基于LobeChat平台打造专属AI助手,重点讲解了两种使用DeepSeek模型的方式。DeepSeek是由中国团队开发的开源大型语言模型,性能优异且支持API调用和本地部署。LobeChat则是开源的AI对话平台,支持私有化部署与多种主流模型集成。
|
10月前
一文彻底搞定电容元件
电容元件是电路中储存电荷的基本组件,通常用“C”表示,单位为法拉(F),常见单位有微法(μF)、纳法(nF)和皮法(pF)。电容具有“通交流,隔直流”的特性,主要用于储能、滤波、耦合与隔直等。根据安装方式可分为固定电容、可变电容和微调电容。其主要参数包括电容值、额定电压和损耗因数。电容广泛应用于电源滤波、信号处理及脉冲电路等领域。
844 0
|
12月前
|
人工智能 自然语言处理 搜索推荐
AI 赋能:开启内容生产效率革命的密钥》
在数字化时代,AI技术正成为提高内容生产效率的关键工具。本文探讨了AI在文章写作、文案创作、翻译、图像识别与生成及数据分析等方面的应用,分析了其提高效率的方式、带来的优势与挑战,并通过新闻媒体、营销、教育等行业案例,展望了AI在内容生产领域的未来。
518 3
|
数据采集 中间件 关系型数据库
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
965 2
|
存储 传感器 数据采集
大数据
大数据是指数据量庞大(Volume)、增长迅速(Velocity)、类型多样(Variety)、价值密度低(Value)但潜力巨大的数据集。其来源包括互联网、物联网及企业内部数据。处理技术涵盖采集、预处理、存储、分析与可视化。应用领域涉及商业智能、金融、医疗、交通及公共服务等,助力决策优化与创新。
880 8
|
SQL 分布式计算 数据安全/隐私保护
实时数仓 Hologres产品使用合集之重建表的索引后,如何将数据导入新表
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
关系型数据库 分布式数据库 PolarDB
【PolarDB开源】PolarDB开源之旅:从零开始搭建分布式数据库集群
【5月更文挑战第20天】PolarDB,阿里云自研的云原生分布式数据库,因其高性能、高可用和易用性备受瞩目。本文指导如何搭建PolarDB集群:准备硬件和软件环境,从GitHub克隆源码,构建Docker镜像,部署控制节点和计算节点,最后验证集群状态。通过开源,PolarDB旨在推动数据库技术进步,邀请用户一同探索其潜力,共创未来。
644 4

热门文章

最新文章