细说文件操作

news2024/9/25 15:26:10

                       你好!感谢支持孔乙己的新作,本文就结构体与大家分析我的思路。

                                         希望能大佬们多多纠正及支持 !!!

7edab4be0868428c9c0a750f6d39f83d.jpeg

                                    个人主页:爱摸鱼的孔乙己-CSDN博客  

目录

 1.什么是文件

 1.1.程序设计文件

1.1.1.程序文件

1.1.2.数据文件 

1.2.二进制文件与文本文件 

2.文件的打开及关闭

 2.1.流和标准流

2.1.1.流(stream)

2.1.2.标准流

2.2.文件指针                                                                                        

2.3.文件的打开及关闭 

2.4.文件的顺序读写

3.文件操作读写深入解析

3.1.fseek

3.2.ftell

3.3.rewind 

3.4.feof 


 


 1.什么是文件


Leading ~~ 我们可以把文件看做一种用于存储信息的数据集合,可以是电子形式或纸质形式。在计算机中,文件通常由操作系统管理,保存用户的数据信息,文件可以包含文本、图像、音频、视频等各种数据。因此,我们有必要对文件进行各种处理,常见的文件操作包括创建、打开、读取、写入、关闭和删除等。

 1.1.程序设计文件

从文件功能的角度来分类,我们一般所涉及的有两种文件,一种是程序文件,另一种是数据文件。当然,程序文件一般指的是计算机可执行代码的文件,这些代码通过编译或解释生成,并且程序文件通常用于执行特定的任务或功能。

1.1.1.程序文件

  • 执行性:程序文件可以被操作系统直接执行,在运行时会将代码加载在内存中。
  • 格式 :常见的程序文件格式包括可执行文件(如.exe 、.app等)和脚本文件(如.py 、.js、.sh等)。
  • 内容 程序文件的内容包含了指令和逻辑,用于控制计算机的行为。
  • 开发工具 :程序文件通常是由编程语言的编译器或解释器实现的。

1.1.2.数据文件 

  • 不可执行性:数据文件本身不可以直接执行。
  • 格式多样性:数据文件可以是文本文件(如 .txt、.csv)、二进制文件(如 .bin、.dat)、数据库文件(如 .db、.sqlite)等。
  • 内容:数据文件的内容通常包括文本、数字、图像、音频、视频等多种类型的信息。
  • 结构化和非结构化:数据文件可以是结构化的(如数据库)或非结构化的(如普通文本文件)。

       程序文件主要用于开发和应用程序、工具和系统软件、或用于控制硬件设备和进行系统管理以及自动化任务和处理数据;数据文件主要用于存储用户信息、设置、文档和媒体文件、或用于应用程序的数据输入及输出,乃至进行数据分析、报表生成和数据迁移。 


1.2.二进制文件与文本文件 

        数据在内存中以二进制的形式存储,不加转换的输出到外存的文件中,就是二进制文件,如果外存上以ASCII码的形式存储,则需要在存储前转换,以ASCII字符的形式存储的文件就是文本文件。字符一律以ASCII形式存储,数值型数据可以用ASCII形式存储,或使用二进制形式存储。


2.文件的打开及关闭


 2.1.流和标准流

2.1.1.流(stream)

        流是一种数据传输的一种抽象,通常用于处理数据的输入和输出。流可以看作是数据的序列,可以是字节流(binary stream)或字符流(character stream)。根据数据的方向,流可以分为两种类型,一种是输入流:用于从外部源(如文件、网络、用户输入等)读取数据;另一种是输出流:用于将数据携入外部目标(如显示器、文件、网络连接等)。

流的主要特点包括:

  • 顺序访问:数据以顺序的方式被读取或写入。
  • 可打开和关闭:流在使用前需要被打开,使用后需要关闭,以释放资源。
  • 缓冲:许多实现使用缓冲技术来提高性能,允许数据的块读取和写入。 

2.1.2.标准流

        标准流是操作系统层面定义的一种特殊流,通常是用于数据输和输出的通道。程序运行时,操作系统会提供以下三个流:

标准流
stdin(标准输⼊流在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。
stdout( 标准输出流⼤多数的环境中输出⾄显⽰器界⾯,printf函数就是将信息输出到标准输出中。
stderr(标准错误流⼤多数环境中输出到显⽰器界⾯。                                                        

2.2.文件指针                                                                                        

        以上stdin、stdouot、stderr三个流的类型是FILE*,通常称为文件指针, 在C语言中,我们就是通过FILE*的文件指针进而维护流的各项操作。

        每个文件在内存中开辟一个对应的文件信息区,用于存放文件的名字、文件状态及文件当前所在的位置。这些信息是保存在一个结构体变量中的,且该结构体类型命名为FILE。然后,我们定义一个指向FILE类型的指针变量ptr,指向某个文件的文件信息区(结构体变量),通过文件指针变量就能够间接查找与之关联的文件。        

2.3.文件的打开及关闭 

        当我们编写程序时,在打开文件的同时,都会返回一个的FILE*的指针变量指向该文件,从而建立指针与文件的关系。并且,ANSIC规定使用fopen函数作为打开文件fclose作为关闭文件

//打开⽂件
FILE * fopen ( const char * filename, const char * mode );
//关闭⽂件
int fclose ( FILE * stream );

        其中,mode是文件的打开模式。其中“r“与”w”分别为输入与输出数据,而“a”是向文本文件尾添加数据,当然,诸如“rb“和”wb“,其作用的便是二进制文件,等等。                                                                  

2.4.文件的顺序读写

 fread与fwrite比较适用于文件输入输出流,其余可以适用于所有输入流。               

                                       

                                                                                    


3.文件操作读写深入解析


3.1.fseek

        fseek是C语言是一个标准库函数,用于在文件中进行随机访问,并且可以将文件指针定位至特定位置,以便进行读写操作。

//fseek
//根据⽂件指针的位置和偏移量来定位⽂件指针(⽂件内容的光标)。
1 int fseek ( FILE * stream, long int offset, int origin );
stream: 指向要操作的文件的指针,通常是通过 fopen 打开的文件。
offset: 偏移量,表示相对于 whence 的字节数。
origin: 确定偏移的起始位置,可以是以下常量之一:
SEEK_SET: 文件开头。
SEEK_CUR: 当前文件指针的位置。
SEEK_END: 文件的末尾。

/* fseek example */
#include <stdio.h>

int main ()
{
 FILE * pFile;
 pFile = fopen ( "example.txt" , "wb" );
 fputs ( "This is an apple." , pFile );
 fseek ( pFile , 9 , SEEK_SET );
 fputs ( " sam" , pFile );
 fclose ( pFile );
 return 0;
}

         在使用fseek之前,确保文件已成功打开;如果目标位置超出了文件的实际大小,fseek可能会导致未定义的行为;在进行写入操作之前,确保文件模式允许写入(例如,使用”r+“或”w+“模式)。

3.2.ftell

        ftell是C语言中的一个·标准库函数,用于获取当前文件在文件中的位置,并且它返回的是当前指针相对于文件开头的字节偏移量

返回⽂件指针相对于起始位置的偏移量
1 long int ftell ( FILE * stream );

/* ftell example : getting size of a file */

#include <stdio.h>
int main ()
{
 FILE * pFile;
 long size;
 pFile = fopen ("myfile.txt","rb");
 if (pFile==NULL) 
 perror ("Error opening file");
 else
 {
 fseek (pFile, 0, SEEK_END); // non-portable
 size=ftell (pFile);
 fclose (pFile);
 printf ("Size of myfile.txt: %ld bytes.\n",size);
 }
 return 0;
}

        成功时返回当前文件指针的偏移量(类型为 long),在一些特定情况下,如果文件被错误地打开,或者文件指针经过某些非法操作,ftell 可能返回 -1

3.3.rewind 

         rewind是C语言中的一个标准库函数,用于将文件指针重置为文件的开头,使用起来非常简单且直观,通常用于将文件指针返回到起始位置,以便重新开始读取或写入文件内容。

让⽂件指针的位置回到⽂件的起始

1 void rewind ( FILE * stream );
 
/* rewind example */
#include <stdio.h>
int main ()
{
 int n;
 FILE * pFile;
 char buffer [27];
 
 pFile = fopen ("myfile.txt","w+");
 for ( n='A' ; n<='Z' ; n++)
 fputc ( n, pFile);
 rewind (pFile);
 
 fread (buffer,1,26,pFile);
 fclose (pFile);
 
 buffer[26]='\0';
 printf(buffer);
 return 0;
}

   rewind 是一个简单且有效的方法来返回文件指针至开头。调用 rewind 也会清除与文件流关联的错误指示符,因此如果之前的读写操作发生了错误,错误状态会被重置。在使用 rewind 前,确保文件已成功打开,否则将导致未定义行为。

3.4.feof 

feof 的作⽤是:当文件读取结束的时候,判断是读取结束的原因是否是: 遇到文件尾结束 。(不能通过函数的返回值直接判断文件是否结束
文本文件读取是否结束,判断返回值是否为 EOF fgetc ),或者 NULL fgets
        • fgetc 判断是否为 EOF .     
         • fgets 判断返回值是否为 NULL .

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用EntityFramework8的学习和开发过程中一些经验

前言&#xff1a; 本篇文章主要记录自己在EF8的学习和使用过程中的碰到一些坑和自己琢磨的一些解决问题的方法以及过程。 问题汇总&#xff1a; 一、Code First 模式下生成表中字段的没有按照我们想要的次序排列 实体上增加注解 [Column(Order 0)] 可以通过Order来控制字段…

[CISCN2019 华北赛区 Day1 Web1]Dropbox 1

目录 题目分析功能测试代码读取index.phpdownload.phpdelete.phpclass.php 关键代码审计user类FileList类File类思路 解题步骤php脚本解题 题目分析 功能测试 注册登录后来到上传文件界面&#xff0c;通过改后缀&#xff0c;改文件头&#xff0c;改content-type&#xff0c;上…

如何养护我们的头发一

正常头发含水量10-13% 头发含水量低 头发就会干燥 受到损伤 头发保水能力弱 保养头发,最重要的是防止头发头发的流水. 正确的洗涤方法 干性头发,一般3天洗一次 油性头发,一般1天洗一次 中性头发,一般2天洗一次 (2)正确的洗发步骤 选择好梳子建议选用木梳或牛角梳 按摩头皮…

释疑 803-(2)物理层 整理总结

目录 2-01 物理层要解决哪些问题?物理层的主要特点是什么? 2-02 规程与协议有什么区别? 2-03 试给出数据通信系统的模型并说明其主要组成构件的作用。 2-04 试解释以下名词&#xff1a;数据、信号、模拟数据、模拟信号、基带信号、带通信号、数字数据、数字信号、码元、…

PHP智能问诊导诊平台-计算机毕业设计源码75056

摘 要 智能问诊导诊平台作为一种智能化医疗服务工具&#xff0c;利用PHP语言开发&#xff0c;旨在为用户提供便捷的在线问诊和导诊服务。该平台集成了智能算法和医疗数据&#xff0c;实现了智能化的病情诊断和治疗建议&#xff0c;帮助用户更快速地获取医疗信息和建议。用户可…

未授权访问

一、Redis 未授权访问 redis-cli -h 192.168.4.176-p6379 &#xff08;使用这个连接&#xff09; 连接成功后使用info测试 二、MongDB 未授权访问 使用fofa搜mongdb端口复制ip到Navicat,连接 】 三、Zookeeper未授权访问漏洞 使用fofa 搜索2181端口使用下面命令在kali在…

5、SystemC行为级建模

1、sc_port关联sc_interface和channel。sc_module聚合sc_module、var、process和sc_port。sc_cthread和sc_method继承sc_thread。 sc_interface中声明很多虚函数&#xff0c;作为接口函数实现接口功能&#xff0c;如send()、recv()等。可以通过发送和接收模块的端口调用(sc_in…

CCF编程能力等级认证GESP—C++3级—20240629

CCF编程能力等级认证GESP—C3级—20240629 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)移位寻找倍数 单选题&#xff08;每题 2 分&#xff0c;共 30 分…

【基础篇】MySQL数据库详解:基础知识详解

一、SQL分类 1.DDL2.DML3.DQL4.DCL二、函数 1.字符串函数2.数值函数3.日期函数4.流程函数三、约束 1.概述2.约束演示3.外键约束四、多表查询 1.多表关系2.多表查询表述3.内连接4.外连接5.自连接6.子查询五、事务 1.事务简介2.事务操作3.事务四大特性4.并发事务问题5.事务隔离级…

C语言——求阶乘的两种方法

第一种方法使用了递归思想 #include <stdio.h> int fun(int N) {if (N 0){return 1;}else{return (fun(N - 1) * N);} } int main() {int N 0;scanf_s("%d", &N);printf("%d",fun(N)); } 第二种方法用的for循环 #include <stdio.h> i…

如何开启idea中的断言功能?

目录 一、什么是断言&#xff1f; 二、Java断言的语法 三、开启断言 一、什么是断言&#xff1f; 断言&#xff08;assert&#xff09;是 Java 中的一条语句&#xff0c;一种在程序中的逻辑&#xff08;如一个结果为真或假的逻辑判断式&#xff09;&#xff0c;目的是验证软…

Unity Shader unity文档学习笔记(十八):unity雾效原理

看很多文章用近平面远平面组成矩阵后转到裁剪空间下通过Z值来解&#xff0c;实际更简单的方式可以直接通过判断距离来实现 FogMgr控制远近面 public class TestFog : MonoBehaviour {public int startDis 0;public int endDis 50;public Vector4 fogParam;public void Awak…

springboot宠物宿舍管理系统-计算机毕业设计源码74795

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

javascript:判断输入值是数字还是字母

1 代码示例 要判断输入值是数字还是字母&#xff0c;我们可以通过JavaScript获取输入框的值&#xff0c;然后使用isNaN函数来检查输入值是否为数字。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><s…

第一阶段面试问题(后半部分)

1. c语言中const *p的用法 &#xff08;1&#xff09;const int *p; 或 int const *p; 指向常量整数的指针&#xff0c;通过这个指针不能修改它所指向的整数值&#xff0c;但可以修改指针本身来指向其他地址 const int a 10; const int *p &a; // *p 20; // 错误&…

商家拒单业务

文章目录 概要整体架构流程技术细节小结 概要 商家拒单是电子商务、外卖平台、在线零售等多个行业中可能出现的情况&#xff0c;指的是商家拒绝接受或完成某个订单。这种情况的发生可能由多种原因引起&#xff0c;同时也涉及到商家、平台和消费者的利益平衡。 需求分析以及接…

CTFHUB-XSS-反射型

开启题目&#xff0c;页面如下 先输入以下语句测试一下&#xff0c;发现页面弹出窗口显示“flag”&#xff0c;说明这里存在 XSS 漏洞 <script>alert("flag")</script> 验证存在 XSS 漏洞后&#xff0c;使用 document.cookie 语句在弹窗和控制台中输出当…

DOM案例

一.什么是DOM DOM(Document Object Model)文档对象模型的树形结构 说白了就是用js操作网页 使用方法: 1.找到对象 2.操作 操作网页 节点属性 改变网页内容.... 文档对象模型就是一个树形结构&#xff0c;类似于家谱树 html标签里面包裹了所有的文档内容。他是一个**父亲节…

用了组合式 (Composition) API 后代码变得更乱了,怎么办?

前言 组合式 (Composition) API 的一大特点是“非常灵活”&#xff0c;但也因为非常灵活&#xff0c;每个开发都有自己的想法。加上项目的持续迭代导致我们的代码变得愈发混乱&#xff0c;最终到达无法维护的地步。本文是我这几年使用组合式API的一些经验总结&#xff0c;希望…

【从相邻元素对还原数组】python刷题记录

R3-图篇 饭前一道题 思路&#xff1a; 单向构造 class Solution:def restoreArray(self, adjacentPairs: List[List[int]]) -> List[int]:mnlen(adjacentPairs)#n表示数组元素总数n1#统计dictdefaultdict(int)#存储关系哈希表hashmapdefaultdict(list)for a,b in adjacent…