第九章:c语言中的文件讲解

文件(C语言) 1.文件(file) 指存储在外部介质上数据的集合,比如我们经常使用的txt、bmp、 jpg、 exe、 rmvb 等等。这些文件各有名的用途,我们通常将它们存放在磁盘或者可移动盘等介质中。 文件无非就是一段数据的集合,这些数据可以是有规则的集合,也可以是无序的集合。操作系统也就是以文件为单位对数据进行管理的。也就是说,要访问外部介质上的数据,必须先按照文件名进行查找,然后从该文件中读取数据。要想写数据到外部介质,必须得建立-个文件,然后再写入。 2.文件一般包括三要素:文件路径、文件名、后缀。 由于在C 阅读详情
一、文件的理解
  1. 文件:文件是指驻留在外部介质(如磁盘等)中的一个有序数据集,可以是源文件、目标程序文件、可执行程序,也可以是待输入的原始数据,或是一组输出的结果。

  2. 文件分为文本文件和二进制文件:

    (1) 文本文件:以字符ASCCII码值进行存储与编码的文件,其文件的内容就是字符
    (2) 二进制文件:存储二进制数据的文件,没有进行任何转换
    
  3. 对文件的操作分为:输入()写操作 和 输出(读操作)

二、文件结构体与文件类型指针
  1. 文件结构体

    (1) FILE 是c语言为了具体实现对文件的操作而定义的一个包含文件操作相关信息的结构类型,在头文件stdio.h中定义,具体如下:
      	struct _iobuf {
            char *_ptr; 
            int _cnt;
            char *_base;
            int _flag;
            int _file;
            int _charbuf;
            int _bufsiz;
            char *_tmpfname;
         };
         typedef struct _iobuf FILE;
    (2) 以上结构 可以称为 FILE 类型
    
  2. 文件类型指针

    (1) 指向FILE类型的指针称为文件类型指针,或是文件指针
    (2) 语法:FILE *文件指针名;
        例如:FILE *fp;
             FILE *fp1,*fp2,*fp3; // 同时定义多个文件指针
    
三、文件的相关操作
文件的访问过程一般遵循的顺序为:打开文件 -> 对文件内容进行读/写 ->关闭文件
  1. 打开文件:

    (1) 函数:FILE*fopen(char *filename,char *mode)
    (2) 说明:
        a. 参数filename表示要打开的文件,可包含路径和文件名两部分
        b. 参数mode表示文件的打开方式
    (3) 功能:该函数将filename表示的文件按指定的mode方式打开,若打开成功,则返回被打开文件的文件指针;若打开失败,则返回NULL(NULL为空指针,在stdio.h中被定义为0)
    (4) 文件打开的方式:
        r:打开一个文本文件只读
        w:打开一个文本文件只写
        a:对一个文本文件添加
        rb:打开一个二进制文件只读
        wb:打开一个二进制文件只写
        ab:对一个二进制文件添加
        r+:打开一个文本文件读/写
        w+:生成一个文本文件读/写
        a+:打开一个文本文件读/写
        rb+:打开二进制文件读/写
        wb+:生成二进制文件读/写
        ab+:打开二进制文件读/写
    (5) 案例:
        FILE *fp;
        fp = fopen("F:\\a.txt","r+");
        注意:c语言的语法中,文件的路径需要使用 "\\"
    (6) 使用:通常应用判断文件是否成功打开
        ....
        if(fp = fopen("F:\\a.txt","r+")==NULL){ // 打开文件
            printf("文件打不开\n");
            exit(0);
        }
        .... // 文件正常打开,则继续往下执行
    
  2. 关闭文件:

    (1) 函数:int fclose(FILE *fp)
    (2) 说明:形参fp为文件指针
    (3) 功能:该函数用于关闭fp所指向的文件,若文件能正常关闭则返回值为0,否则返回值为EOF(-1)
    (4) 案例:fclose(fp);
    
  3. 按照单个字符 读/写 文件(以ASCII字符为单位的文件顺序读/写)

    (1) 单个字符读函数
        a. 函数:int fgetc(FILE *fp)
        b. 参数:形参 fp为文件指针
        c. 功能:该函数从指定文件的当前位置读取一个ASCII字符,并将文件位置指针器向后移动1个字节。若读取成功,则函数返回读取的字符,否则返回文件结尾的标志 EOF(-1)
        
    (2) 单个字符写函数
        a. 函数:int fputc(char ch,FILE *fp)
        b. 参数:形参 ch为待写入文件的字符,形参fp为文件指针
        c. 功能:该函数在指定文件的当前位置写入一个ASCII字符,并将文件位置指示器向后移动1个1字节,若写入成功,则函数返回写入的字符,否则返回EOF(-1) 
    
  4. 案例:按照字符读写操作

    #include <stdio.h>
    #include<stdlib.h>
    enum week{
    	Mon,Tue,Wed,Thu,Fri,Sat,Sun 
    };
    
    void main(){
    	FILE *fp;
    	char ch;
    	printf("%d\n",fgetc(fp));
    	
    	if(fp=fopen("F:\\a.txt","r")==NULL){
    		printf("文件打不开\n");
    		exit(0);
    	}
    	fputc('h',fp);
    	
    	printf("文件内容为:");
    	int n =0;
    	while(!feof(fp)) {
    		ch = fgetc(fp);
    		printf("%d\n",ch);
    		n ++ ;
    		if(n==5) break;
    	}	
    	fclose(fp);
    }
    
  5. 按照字符串读/写函数

    (1) 字符串读函数:
        a. 函数:char *fgets(char *str,int n,FILE *fp)
        b. 参数:形参str:指定从文件中读取到的字符串将要存入的地址,一般是个字符数组;
                形参n:指定从文件中读取的字符个数,实际是读取n-1个,最后将读取的n-1个字符联通"\0"(字符
                      串结束标志)一起构成n个字符存放字符数组str中
                形参fp:文件指针
         c. 功能:函数执行成功,返回地址str,否则返回NULL
         d. 注意:
            i. 在读取n-1个字符前碰到了换行符 "\n",则读入提前结束,单换行符"\n"也会作为一个字符读入
            ii. 在读取n-1个字符前碰到了文件结束符EOF,读入结束
            以上两种情况都会在实际读取的字符后面加上字符"\0",作为最终读取的字符串返回
    (2) 字符串写函数:
          a. 函数:int fputs(char *str,FILE *fp)
          b. 参数:形参str:指向带写入文件的字符串
                  形参fp:文件指针
          c. 功能:函数将字符串str写入fp指向的文件中,但字符串末尾 "\0" 不写入;若写入成功,函数返回为
                  0,否则返回EOF。
    
2024年《维生素C语言》C语言从入门到进阶教程【内附链接,可订阅专栏】 维生素C语言》适合已经接触过C语言的读者观看,适合用来复习巩固。共18大章,每个章节分为若干个小节,部分章节备有配套的练习,并且本系列附带了三套C语言笔试题以及答案详细解析。由于作者水平有限、时间仓促紧迫,本教学有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!从第一章博客的更新到最后一章共历时四个月,难免会有排版、代码风格、图标运用的不一致的地方,还请谅解。 阅读详情

相关推荐

C/C++教程 第九章 —— windows编程入门

本文是C/C++教程的第九章,介绍了Windows编程的基础知识,包括创建窗口的过程、使用WinAPI函数、消息循环和回调函数。通过实例详细讲解如何从零开始创建一个简单的Windows窗口程序,强调了理解Windows消息机制的重要性,并提供了完整代码示例。

余识- 6292

c语言把文件看作是一个字符序列,C语言对文件的操作

C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCⅡ文件和二进制文件。ASCⅡ文件:又称文本文件,它的每一个字节放一个ASCⅡ代码,代表一个字符。用ASCⅡ形式输出与字符一一对应,因而便於对字符进行逐个处理,也便於输出字符,但一般占存储空间较多,而且要花费转换时间。二进制文件:是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放...

weixin_28934081的博客 1506

Penpot自托管全攻略:5分钟搞定私有化部署(附Docker配置详解)

本文详细介绍了Penpot开源原型设计工具的私有化部署全流程,从Docker基础配置到企业级优化方案。通过分步指南和实战技巧,帮助设计团队快速搭建安全高效的自托管环境,实现数据自主可控。内容涵盖LDAP集成、性能监控、备份策略等关键企业需求,是Penpot私有化部署的完整参考手册。

sugar的博客 1131

文件---

一、文件的基本概念 1.文件概述:“文件”一般是指存储在外部介质上的一组数据的有序集合。c语言将文件看作是字符(字节)序列,即一个一个字符(字节)的数据舒徐组成。 文件名的一般形式为:文件名主干.扩展名 2.文件的分类 1)从用户的角度来看,文件可分为普通文件和设备文件。 普通文件是指驻留在外部介质上的一个有序数据集,可以是程序,也可以是一组待输入处理的原始数据,或者是一组输出的结果 设备文件是指与主机相连的各种外部设备。 2)按文件存储数据的内容来分,文件可分为程序文件和数据文件 程序文件

weixin_62917800的博客 3254

Win10 / Win11 启用 Hyper-V 虚拟机详细教程(图文+命令行全攻略)

摘要:本文详细介绍Windows10/11系统启用Hyper-V虚拟化平台的方法,包含专业版/企业版的图形界面和PowerShell命令行操作,以及家庭版通过脚本强制启用的特殊方案。内容涵盖版本支持对比、操作步骤图解、常见问题解答和性能优化建议,帮助开发者快速搭建虚拟化环境进行多系统测试。附微软官方文档参考链接和详细操作示意图。

ElioXu 7058

软件测试方法——等价类划分法详解

!如果下面这些资料用得到的话可以直接拿走:1、自学开发或者测试必备的完整项目源码与环境2、测试工作中所有模板(测试计划、测试用例、测试报告等)3、软件测试经典面试题4、Python/Java自动化测试实战.pdf5、Jmeter/postman接口测试全套视频获取6、Python学习路线图。

MXB1220的博客 1万+

C语言中的文件(笔记向,带小白一次性搞懂大部分C语言基础文件操作)

无论是否是计算机相关从业者,文件是人们日常工作生活中常挂于嘴边的词语,那么到底什么是文件呢?为了提高计算机运行程序的速度,我们在程序中创建的变量都储存在内存中,不论是栈区还是堆区,如果程序退出,程序所申请的内存被回收给操作系统,数据就丢失了,当我们再次运行程序,数据就已经不在了。如果要将数据持续化保存,我们就要使用文件。磁盘上的文件是文件。使用文件 可以理解为这是一种拿时间换空间的做法(磁盘的调用速度会远小于内存,只不过在目前的小体量代码与程序中不会体现)。

2301_79501467的博客 2137

【云原生进阶之容器】第六章容器网络6.6.2--Cilium部署

部署Cilium非常简单,可以通过单独的yaml文件部署全部组件(目前我使用了这个方式部署了1.7.1版本),也可以通过Helm Chart一键完成。重要的是部署环境和时机:官方建议所有部署节点都使用Linux最新稳定内核版本,这样所有的功能都能启用。作为一个Kubernetes网络组件,它应该在部署Kubernetes其他基础组件之后,才进行部署。

junbaozi的专栏 790

C语言——文件

文件是指存放在外部存储介质(可以是磁盘、光盘、磁带等)上的数据集合。操作系统对外部介质上的数据是以文件形式进行管理的。打开二个文件或者创建一个新文件时,一个数据流和一个外部文件(也可能是一个物理设备)相关联。为标识一个文件,每个文件都必须有一个文件名作为访问文件的标志,其一般结构为文件名.扩展名。根据文件的存储形式,可分为ASCII码文件和二进制文件。ASCIH文件也称为文本文件这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数1124的存储形式。

m0_73974056的博客 263

由Sensor光谱响应曲线联想到的白平衡增益计算

由Sensor光谱响应曲线联想到的白平衡增益计算 由于传感器硬件的限制,传感器在某个预定波长范围内的响应不可能是100% 响应。现实中都是类似于正态分布的单峰函数。如果仅做粗略计算,由一个中心波长和半高宽(也成半波宽)完全可以由数学公式计算出一个高斯分布曲线。这个分布曲线就叫波谱响应函数。 波谱响应函数反映了传感器通道获取能量的情况。实际上每个传感器厂商都提供了具体的光谱响应函数,一般由两列数据组成,一列数据是波长,另一列数据是相对响应强度。下图某sensor光谱的响应的波谱响应函数。 ...

大熊 7487

基于Simulink的新能源汽车热管理系统设计与仿真详细介绍

新能源汽车(如纯电动汽车和混合动力汽车)的热管理系统是确保电池、电机和电控系统高效运行的关键。通过合理设计热管理系统,可以提高车辆的续航里程、延长电池寿命并提升整体性能。以下是如何在 MATLAB 和 Simulink 中设计并仿真一个新能源汽车热管理系统的详细步骤。通过上述步骤,我们成功设计并实现了基于 Simulink 的新能源汽车热管理系统。该系统能够根据目标温度和实际反馈,通过 PID 控制器或模糊控制器调整冷却液流量、风扇转速等参数,实现对电池、电机和车内的精确温度控制。

xiaoheshang_123的博客 383

C语言 第九章 文件系统 重点 典型题

一、概念 二、重点代码(书本) 三、重点题目

weixin_40377925的博客 4493

SOMEIP协议--第三节[SOMEIP/SD](SD格式)

Entry和Option是SD报文中最重要的内容,是服务发现功能的承载。7.Minor Version是指当前服务的小版本号,可以配置,用于给用户区分当前服务的版本用的。注意:stop offer,stop subscribe,Subscribe Nack 这三条的TTL一定设为0,唯一和offer,subscribe,Subscribe的区别。Option用来辅助Entry实现其功能,是Entry携带的附加信息,作用上一般是用来告诉对端自己业务的ip和port信息,方便对端通过ip和port发送报文。

qq_41816308的博客 1338

【C语言】第九章 其他

该文章内容整理自《C程序设计(第四版)》、《高质量C编程指南》、以及网上各大博客 文章目录关键词命名规范注释预处理宏定义条件编译文件包含#line预处理#error预处理#pragma预处理#运算符##运算符 关键词 C语言中共有32个关键词 void //声明函数无返回值或无参数,声明空类型指针 int //声明整型变量 double //声明双精度变量 long //声明长整型变量 char //声明字符型变量 float //声明浮点型变量 short //声明短整型变量

Flowers_for_Algernon的博客 401

Python 爬虫实战:爬取 Bing 搜索功能链接(国际搜索引擎数据采集技巧)

在当今数字化信息爆炸的时代,搜索引擎已成为我们获取知识、了解世界的得力助手。Bing,作为全球知名的搜索引擎之一,拥有庞大的数据索引和精准的搜索算法。通过 Python 爬虫技术爬取 Bing 搜索区域的链接信息,不仅能帮助我们快速收集大量有价值的数据,还能为后续的数据分析、内容挖掘等任务提供丰富的素材。

yansideyucsdn的博客 1339

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

《维生素C语言》C语言从入门到进阶教程【内附链接,可订阅专栏】(建议收藏)

【维生素C语言】总结篇

有道无术, 术尚可求。有术无道, 止于术。 6968

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c语言 第九章习题,c语言第九章习题

第九章:预处理预处理概述在前面各章中,已多次使用过以“#”号开头的预处理命令。如包含命令# include,宏定义命令# define等。在源程序中这些命令都放在函数之外, 而且一般都放在源文件的前面,它们称为预处理部分。所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能, 它由预处理程序负责完成。当对一个源文件进行编译时, 系统将自动引用预处理...

weixin_39574868的博客 193

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C语言第九章字符函数和字符串函数

本文系统介绍了C语言中字符处理相关函数,主要包括三类:1. 字符分类函数(如iscntrl、isspace等)用于判断字符类型;2. 字符转换函数(tolower、toupper)实现大小写转换;3. 字符串处理函数(strlen、strcpy等)完成字符串操作。详细讲解了各类函数的使用方法、注意事项及模拟实现原理,包括strlen的三种实现方式、strcpy的高级循环写法等。同时介绍了strerror和perror函数处理错误信息的方法。

WANGxinhua4321的博客 1269

C语言程序设计基础

                         第一节 C语言程序设计概述   1.1C程序设计语言简介            &nbs

ZL_BKPD的博客 4726

《C语言程序设计》专升本考试大纲

《C语言程序设计》专升本考试大纲 一、总要求 本课程地位:本课程是计算机专业的核心课程之一。 本课程性质:本课程是计算机专业的专业基础课程 本课程了解、熟悉、掌握的主要内容:了解C语言的主要特征、常用算法描述以及其它相关基础知识;掌握C语言中顺序程序设计、选择程序设计、循环程序设计、指针、结构体共用、函数、文件操作等。 二、内容 第一章 C语言概论  了解C语言的主要特征,掌握C语言程序的基...

weixin_44099012的博客 9143

【C++】第九章:IO流

【C++】第九章:IO流 文章目录【C++】第九章:IO流一、C语言的输入输出二、流的概念三、C++的IO流1.C++标准IO流2.C++文件IO流①.定义文件流对象②.打开文件③.对文件进行读写操作④.关闭文件3.operator<< 和 operator>>写入和读取四、stringstream流 一、C语言的输入输出 在C语言中用到的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数 据,并将值存放在变量中。 print

_zhy_cq 356

C语言视频教程(初学C语言,还是看视频更直观)

对于初学C语言,看文字教程会存在厌学情绪,往往不乐意去看文字性的东西,不能够很好的理解文字介绍。作为初学者,我更推荐大家看视频教程,这样跟着老师的思路一步步编程,能够更直观和快速的入门C语言。我在我的百度网盘分享了四位老师的C语言视频教程,大家可以免费下载学习,下载地址: 网盘资料:链接:https://pan.baidu.com/s/1odgbx4gxSKqBkispTBxthg 提取码:vi74 更多关于C语言视频的教程通过百度网盘下载: 郝斌C语言入门视频教程下载(180集全) 小甲.

Dog语言 2677

C语言 | 第九章 | break continue 枚举

介绍:continue语句用于结束本次循环,继续执行下一次循环;当执行到continue的时候,下面变量的迭代是不会执行的,直接进行下一次循环条件的判断,而不是直接退出整个循环。C 语言的 goto 语句可以无条件地转移到程序中指定的行。goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。

ZJC744575的博客 983

C 语言学习 第十章 文件与图形(一)

一个文件 (file) 通常就是磁盘上的一段命名的存储区文本视图和二进制视图。

2301_80038875的博客 1020

第九章 指针_C语言指针是什么?1分钟彻底理解C语言指针的概念

没学指针就是没学C语言!指针是C语言的精华,也是C语言的难点,破解C语言指针,会让你的C语言水平突飞猛进。 所谓指针,也就是内存的地址;所谓指针变量,也就是保存了内存地址的变量。不过,人们往往不会区分两者的概念,而是混淆在一起使用,在必要的情况下,大家也要注意区分。 计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节,char 占用 1 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可

qq_43205256的博客 327

C语言14章零基础干货 第九章

今天有点忙,更新晚了点

2501_92247307的博客 679
上一篇: 第八章 - c语言中的联合体和枚举
百知_zmj
博客等级 码龄8年 590粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值