文件的介绍

文件介绍

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

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

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

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

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

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

程序文件

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

源代码文件

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

目标文件

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

可执行文件

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

数据文件

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

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

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

文本文件

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

二进制文件

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

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

6350c121b8224709aa4f9ce05b5c2704.png

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

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

2a716aeb400445ac895479748dcb8d36.png

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

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

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

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

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

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

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

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

标准流

标准流是指在计算机程序中用于输入和输出的预定义流。在大多数操作系统和编程语言中,通常有三种标准流:
- 标准输入流(stdin):用于接收程序的输入数据。
- 标准输出流(stdout):用于向用户显示输出数据。
- 标准错误流(stderr):用于向用户显示错误信息。与标准输出流不同的是,标准错误流通常用于显示程序运行时的错误信息,而不会影响程序的正常输出。

文件指针

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

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

有关文件的函数

打开与关闭文件

fopen和fclose

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

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

fopen

eba2b07478ad4061a07c97b2095a61b2.png

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

d47eeae7ffa14275bd223f20578769d9.png

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

 fclose

ff3e888e1a934f3da4c89ff59200f7c9.png

 代码实操:

/* fopen fclose example */
#include <stdio.h>
int main ()
{
 FILE * pFile;
 //打开⽂件
 pFile = fopen ("myfile.txt","w");
 //⽂件操作
 if (pFile!=NULL)
 {
 fputs ("fopen example",pFile);
 //关闭⽂件
 fclose (pFile);
 }
 return 0;
}

 

文件的顺序读写

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

e7ceb9bea28f4ed29834d0b8e5ccfb8a.png

 

文件的随机读写

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/489125.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chrome 插件各模块之间的消息传递

Chrome 插件各模块之间的消息传递 一、消息传递 1. 消息传递分类 Chrome 插件的 Action、Background 和 content_script 三个模块之间的信息传输插件和插件之间的信息传输网页向插件进行信息传输与原生应用进行消息传递 2. 消息传递 API runtime API runtime.sendMessage(…

新房装修后,经验总结和坑点复盘

房子装修的时候&#xff0c;谁在盯着你的钱包&#xff1f;谁想从你这里捞钱&#xff1f;一是负责签合同的装修公司&#xff0c;二是负责实际装修的工地工头。装修公司要从你这份合同里为公司赚取运营成本和利润&#xff0c;工地装修工头要从你这里赚取他私人的利益。 在签合同…

C语言例4-13:已知圆柱体的底半径是1.5,高是2.0,计算其体积并输出。

代码如下&#xff1a; //已知圆柱体的底半径是1.5&#xff0c;高是2.0&#xff0c;计算其体积并输出。 #include<stdio.h> #define PI 3.1415926 int main(void) {float radius1.5, high2.0,vol;vol PI*radius*radius*high; //计算圆柱体的体积printf("vol %7.…

jsonpath和json数据(序列化loads()、反序列化eval())及断言处理(断言封装)

jsonpath&#xff1a;对json串进行搜索 安装jsonpath 安装&#xff1a;pip install jsonpath 导入&#xff1a; from jsonpath import jsonpath jsonpath能通过简单的方式就能提取给定JSON中的字段。 jsonpath官方地址&#xff1a;https://goessner.net/articles/JsonPath/ 在…

AI视频渲染原理是什么?

一、AI渲染原理 AI视频渲染是一种结合了人工智能技术的新型渲染方式&#xff0c;它主要通过深度学习和其他机器学习方法来优化传统渲染流程&#xff0c;以提高效率和质量。以下是AI视频渲染可能涉及的一些基本原理&#xff1a; 1. **智能采样**&#xff1a; - AI可以帮助决定在…

Go第三方框架--gin框架(二)

4. gin框架源码–Engine引擎和压缩前缀树的建立 讲了这么多 到标题4才开始介绍源码&#xff0c;主要原因还是想先在头脑中构建起 一个大体的框架 然后再填肉 这样不容易得脑血栓。标题四主要涉及标题2.3的步骤一 也就是 标题2.3中的 粗线框中的内容 4.1 Engine 引擎的建立 见…

R语言学习——Rstudio软件

R语言免费但有点难上手&#xff0c;是数据挖掘的入门级别语言&#xff0c;拥有顶级的可视化功能。 优点&#xff1a; 1统计分析&#xff08;可以实现各种分析方法&#xff09;和计算&#xff08;有很多函数&#xff09; 2强大的绘图功能 3扩展包多&#xff0c;适合领域多 …

【Python实用标准库】argparser使用教程

argparser使用教程 1.介绍2.基本使用3.add_argument() 参数设置4.参考 1.介绍 &#xff08;一&#xff09;argparse 模块是 Python 内置的用于命令项选项与参数解析的模块&#xff0c;其用主要在两个方面&#xff1a; 一方面在python文件中可以将算法参数集中放到一起&#x…

基于nodejs+vue基于协同过滤算法的私人诊python-flask-django-php

实现后的私人诊所管理系统基于用户需求分析搭建的&#xff0c;并且会有个人中心&#xff0c;患者管理&#xff0c;医生管理&#xff0c;科室管理&#xff0c;出诊医生管理&#xff0c;预约挂号管理&#xff0c;预约取消管理&#xff0c;病历信息管理&#xff0c;药品信息管理&a…

国内IP节点更换攻略,一键解决烦恼

在如今的互联网时代&#xff0c;网络已经成为人们生活中不可或缺的一部分。而对于许多网民来说&#xff0c;网络速度的快慢直接关系到他们的上网体验。在国内&#xff0c;很多用户常常遇到一个问题&#xff0c;那就是网络速度不稳定。有时候可以流畅地上网&#xff0c;有时候却…

【LeetCode热题100】108. 将有序数组转换为二叉搜索树(二叉树)

一.题目要求 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡二叉搜索树。 二.题目难度 简单 三.输入样例 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#x…

React Native 应用打包上架

引言 在将React Native应用上架至App Store时&#xff0c;除了通常的上架流程外&#xff0c;还需考虑一些额外的优化策略。本文将介绍如何通过配置App Transport Security、Release Scheme和启动屏优化技巧来提升React Native应用的上架质量和用户体验。 配置 App Transport…

【目标检测】西红柿成熟度数据集三类标签原始数据集280张

文末有分享链接 标签名称names: - unripe - semi-ripe - fully-ripe D00399-西红柿成熟度数据集三类标签原始数据集280张

Spring文件配置以及获取

前言 我们都知道很多应用都是有配置文件的,可以对应用的一些参数进行配置,如conf... 本篇我们讲解关于Spring的配置文件以及程序怎么获取其中写入的参数 Spring中的配置文件主要有三种 还有yml和ymal文件 下面我们将介绍关于常用的两种 preoperties 和 yml文件的格式和读取…

【SQL】1667. 修复表中的名字(UPPER()、LOWER()、SUBSTRING()、CONCAT())

前述 SQL中字符串截取函数(SUBSTRING) SQL 字母大小写转换函数UPPER()、UCASE()、LOWER()和LCASE() 题目描述 leetcode题目&#xff1a;1667. 修复表中的名字 Code select user_id, concat(upper(substring(name, 1, 1)),lower(substring(name, 2)) ) as name from Users o…

5G双域专网+零信任的神奇魔法

引言 在当今数字化程度不断提升的社会中&#xff0c;信息安全已经成为企业和组织发展的关键要素之一。特别是在网络连接日益广泛的环境下&#xff0c;对于数据的保护和隐私的维护变得尤为重要。随着5G技术的飞速发展&#xff0c;5G双域专网为企业提供了更快速、更可靠的连接&a…

对标开源3D建模软件blender,基于web提供元宇宙3D建模能力的dtns.network德塔世界是否更胜一筹?

对标开源3D建模软件blender&#xff0c;基于web提供元宇宙3D建模能力的dtns.network德塔世界是否更胜一筹&#xff1f; blender是一款优秀的3D建模开源软件&#xff0c;拥有免费开源、功能强大、渲染速度优秀的优点。而开源的dtns.network德塔世界&#xff0c;亦是专业级的元宇…

cinder学习小结

1 官方文档 翻译官方文档学习 链接Cinder Administration — cinder 22.1.0.dev97 documentation (openstack.org) 1.1 镜像压缩加速 在cinder.conf配allow_compression_on_image_upload True可打开开关 compression_format xxx可设置镜像压缩格式&#xff0c;可为gzip 1.2 …

【MATLAB源码-第11期】基于matlab的2FSK的误码率BER仿真以及原信号调制信号解调信号波形展示。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 2FSK&#xff08;Frequency Shift Keying&#xff09;为二进制数字频率调制&#xff08;二进制频移键控&#xff09;&#xff0c;用载波的频率来传送数字信息&#xff0c;即用所传送的数字信息控制载波的频率。2FSK信号便是符…

vulnhub-----pWnOS1.0靶机

文章目录 1.信息收集2.漏洞测试3.爆破hash4.提权 首先拿到一台靶机&#xff0c;就需要知道靶机的各种信息&#xff08;IP地址&#xff0c;开放端口&#xff0c;有哪些目录&#xff0c;什么框架&#xff0c;cms是什么&#xff0c;网页有什么常见的漏洞&#xff0c;如sql注入&…