C语言之文件操作(上)

news2024/11/26 8:44:17

C语言之文件操作(上)

文章目录

  • C语言之文件操作(上)
    • 1. 什么是⽂件?
      • 1.1 程序⽂件
      • 1.2 数据⽂件
      • 1.3 ⽂件名
    • 2. ⼆进制⽂件和⽂本⽂件
    • 3. ⽂件的打开和关闭
      • 3.1 流和标准流
        • 3.1.1 流
        • 3.1.2 标准流
    • 4. ⽂件指针
    • 5. 文件的打开与关闭

1. 什么是⽂件?

  磁盘上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)

1.1 程序⽂件

  程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows环境后缀为.exe)

1.2 数据⽂件

  ⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件

1.3 ⽂件名

  ⼀个⽂件要有⼀个唯⼀的⽂件标识,以便⽤⼾识别和引⽤。
⽂件名包含3部分:⽂件路径+⽂件名主⼲+⽂件后缀

例如: c:\code\test.txt

为了⽅便起⻅,⽂件标识常被称为⽂件名

2. ⼆进制⽂件和⽂本⽂件

数据⽂件又被称为⽂本⽂件或者⼆进制⽂件

  1. 数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存,就是⼆进制⽂件
  2. 如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件

字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储

例如:10000如果以ASCII形式存储,则磁盘占5个字节(一个字符为1个字节),而以二进制形式存储,则磁盘占4个字节(一个整型)
在这里插入图片描述

ASCII形式存储:将每个字符转为对应的ASCII值,在将对应ASCII值转为二进制
二进制形式存储:将值转为二进制形式

3. ⽂件的打开和关闭

3.1 流和标准流

3.1.1 流

  在输入/输出数据的时候会输入/输出到不同的设备中,不同设备的输入/输出是以不同的方式的,为了方便程序员的操作,我们抽象出了流的概念,我们可以把流想象成流淌字符的河流

⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作

3.1.2 标准流

C语言在程序启动时,默认开打了三种流:
stdin — 标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据

stdout — 标准输出流,⼤多数的环境中输出⾄显⽰器界⾯,printf函数就是将信息输出到标准输出
流中

stderr — 标准错误流,⼤多数环境中输出到显⽰器界⾯

这是默认打开了这三个流,我们使⽤scanf、printf等函数就可以直接进⾏输⼊输出操作的。

stdinstdoutstderr三个流的类型是: FILE*,通常称为⽂件指针。
C语⾔中,就是通过FILE* 的⽂件指针来维护流的各种操作的

4. ⽂件指针

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

在VS2013编译环境提供的 stdio.h 头⽂件中有以下的⽂件类型申明:

struct _iobuf {
 char *_ptr;
 int _cnt;
 char *_base;
 int _flag;
 int _file;
 int _charbuf;
 int _bufsiz;
 char *_tmpfname;
 };
typedef struct _iobuf FILE;

不同的C编译器的FILE类型包含的内容不完全相同,但是⼤同⼩异

  不用关系这段代码是如何实现的,当我们打开⼀个⽂件的时候,系统会根据⽂件的情况⾃动创建⼀个FILE结构的变量,并填充其中的信息,使⽤者不必关⼼细节

5. 文件的打开与关闭

⽂件在读写之前应该先打开⽂件,在使⽤结束之后应该关闭⽂件

ANSIC 规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件

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

filename为文件的路径
mode为打开方式(只读,只写,…)
stream 为文件指针

mode模式有以下几种:

在这里插入图片描述

注意:

  1. 当任意读取文件的方式读取不存在的文件时,将会报错
  2. 打开文件也是有返回值的,当打开失败会返回一个NULL指针,所以最好对返回值进行判断
  3. 和动态内存管理相似,开辟空间需要free释放,同理打开文件也需要关闭文件fclose,并且将文件指针置NULL
    示例:
#include <stdio.h>

int main()
{
	FILE* pf = fopen("test.txt","r");//只读方式打开文件
	fclose(pf);//关闭文件
	return 0;
}

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

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

相关文章

c语言:制造简单的计算器|练习题

一、题目 制造一个简单的计算器。输入两个数&#xff0c;计算加减乘除的结果。 如图&#xff1a; 二、代码截图【带注释】 三、源代码【带注释】 #include int main() { int yunSuanFu0;//定义运算符符号变量 int num1,num2;//定义要输入的两个数字 cc: printf(…

VUE中的8种常规通信方式

文章目录 1.props传递数据(父向子)2.$emit触发自定义事件&#xff08;子向父&#xff09;3.ref&#xff08;父子&#xff09;4.EventBus&#xff08;兄弟组件&#xff09;5.parent或root&#xff08;兄弟组件&#xff0c;有共同祖辈&#xff09;6.attrs和listeners&#xff08;…

基于Java+Swingt学生信息管理系统

基于JavaSwing学生信息管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 1.用户登陆&#xff1a;在帮助按钮处&#xff0c;可以查看登陆账号及密码&#xff1a; 账号admin,密码123456 在未输入的情况下&#xff0c;会提示用户名不能为空&#xff…

树专题 —— 深入理解经典红黑树

大家好&#xff0c;我是 方圆。本篇我们讲红黑树的经典实现&#xff0c;Java中对红黑树的实现便采用的是经典红黑树。前一篇文章我们介绍过左倾红黑树&#xff0c;它相对来说比较简单&#xff0c;需要大家看完上篇再来看这一篇&#xff0c;因为旋转等基础知识不会再本篇文章中赘…

程序人生15年人生感悟

计算机程序员并不是一件什么高大上的职业。而仅仅是一份普通的工作。就像医生能治病救人&#xff0c;我们能治蓝屏救程序&#xff0c;我们都在为这个世界默默的做出自己的贡献。刻意或无意宣扬某个职业高大上&#xff0c;其实质是对其它行业从业者的不公平。但是有些人却常常这…

防火墙 设置 出站规则

测试需求&#xff1a;禁止10000端口出站&#xff0c;用于测试 搜索栏 &#xff0c;输入防火墙&#xff0c;打开防火墙和网络保护&#xff0c;打开高级设置 新建一个出站规则 新建规则 &#xff0c;自定义、 这样就建好了 同时确保 防火墙&#xff0c;至少有一个打开着&#xf…

java:微服务springcloud入门以及eureka、ribbon、hystrix、feign、gateway的使用

文章目录 微服务架构Spring Cloud微服务或Spring Cloud的工作流程&#xff1a;常见注册中心技术常见的负载均衡技术常见的熔断器技术常见的配置管理技术常见的网关技术常见的消息追踪技术常见的消息总线技术示例&#xff1a;服务注册发现eureka的使用Eureka服务器服务消费者&am…

深入探索Spring Batch:大规模批处理的领航者

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 写在前面参与规则 ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论…

鸿蒙 Ark ui 实战登录界面请求网络实现教程

团队介绍 作者&#xff1a;徐庆 团队&#xff1a;坚果派 公众号&#xff1a;“大前端之旅” 润开鸿生态技术专家&#xff0c;华为HDE&#xff0c;CSDN博客专家&#xff0c;CSDN超级个体&#xff0c;CSDN特邀嘉宾&#xff0c;InfoQ签约作者&#xff0c;OpenHarmony布道师&…

备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

MySQLhttps://www.mysql.com/ 将下发的ds_db01.sql数据库文件放置mysql中 12、编写Scala代码&#xff0c;使用Spark将MySQL的ds_db01库中表user_info的全量数据抽取到Hive的ods库中表user_info。字段名称、类型不变&#xff0c;同时添加静态分区&#xff0c;分区字段为etl_da…

(1)Linux的 安装与用户的创建

前言 本章正式开始Linux的学习 如果关于Linux环境搭配有问题的朋友 可以阅读此文章:Linux环境搭建 一&#xff0c;浅用一下吧 —— Hello, Linux! 我们现在已经登陆上了&#xff0c;我们当然可以用它来做很多事。 我们来用它写一个 "Hello, Linux!" &#xff0c;来…

Mysql 计算地理位置信息

mysql 处理空间关系 MySQL提供了一系列的函数来帮助我们处理空间对象之间的关系&#xff0c;如 ST_Intersects、ST_Contains 等。这些函数可以帮助我们判断空间对象之间的位置关系&#xff0c;并在此基础上执行相应的查询。 多边形查询 在实际应用中&#xff0c;需要查询某个…

八股文打卡day2——计算机网络(2)

面试题&#xff1a;讲一下三次握手的过程&#xff1f; 我的回答&#xff1a; 1.客户端发送报文段到服务器&#xff0c;主动建立连接。这个报文段中SYN标志位表示&#xff1a;这个报文段是用于连接的&#xff0c;此时SYN标志位设置为1。其中初始序列号字段包含了客户端的初始序…

Vue 项目关于在生产环境下调试

前言 开发项目时&#xff0c;在本地调试没问题&#xff0c;但是部署到生产会遇到一些很奇怪的问题&#xff0c;本地又没法调&#xff0c;就需要在生产环境/域名下进行调试。 在这里介绍一个插件Vue force dev ,浏览器扩展里下载 即便是设置了Vue.config.devtoolsfalse 只要安…

计算机网络:自顶向下第八版学习指南笔记和课后实验--运输层

记录一些学习计算机网络:自顶向下的学习笔记和心得 Github地址&#xff0c;欢迎star ⭐️⭐️⭐️⭐️⭐️ 运输层 TCP&#xff1a; 传输控制协议 报文段 UDP&#xff1a; 用户数据包协议 数据报 将主机间交付扩展到进程间交付被称为运输层的多路复用与多路分解 将运输层…

苹果手机录屏没声音?找出原因,轻松修复!

“有人知道苹果手机录屏为什么没声音吗&#xff1f;今天录屏的时候&#xff0c;发现录制的视频没有声音&#xff0c;反反复复试了好几次&#xff0c;还是一样的情况&#xff0c;真的不知道该怎么办了&#xff0c;有人能帮帮我吗。” 苹果手机的内置录屏功能为用户提供了方便的…

小程序地图检索

<template><view style"background-color: #f5f5f5"><!-- 头部开始 --><viewstyle"position: fixed;left: -5rpx;right: -5rpx;z-index: 99;top: -5rpx;width: 101vw;"><view style"position: relative"><view…

系统移植导学

什么是系统移植&#xff1f; 将操作系统移植到对应的硬件平台 linux系统移植到FS6818开发板 学习系统移植的目的&#xff1f; 1》浅图&#xff1a;为后面的驱动开发学习搭建一个系统环境 2》钱途&#xff1a;就业、工作的需要&#xff08;公司新的硬件平台---》移植linux系统到…

【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真程序实物演示讲解视频&#xff09; Proteus 仿真&#xff1a;Proteus 8.16(有低版本) 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;P04 1. 主要功能&#xff1a…

台灯选用什么类型好?精选适合考研党使用的护眼台灯

台灯可以说是我们日常办公、学习必不可少的一盏桌面照明工具&#xff0c;因为他能够给我们带来充足的光线。不过大多数时候&#xff0c;我们只关注到了台灯的亮度是否足够&#xff0c;以为只要光线够亮就不会上眼镜&#xff0c;但实际上我们大多数实力下降的原因就和光线有很大…