文件操作详解(一)

目录

  • 一.文件的类型
    • 1.数据文件
    • 2.程序文件
    • 3.文件名
  • 二. 二进制文件
  • 三.文本文件
  • 四. 文件的打开(fopen)和关闭(fclose)
      • 1.1流是什么
      • 1.2标准流
    • 2.文件指针

在这里插入图片描述

一.文件的类型

存储在硬盘上的是文件,文件分为数据文件和程序文件两种类型(根据功能不同分类的)

1.数据文件

数据文件是程序运行时读写的数据
例如:程序运行时需要从中读取数据的文件,
程序运行时需要从中写进数据的文件
数据文件被分为二进制文件文本文件(根据数据类型不同分的)

2.程序文件

以windows为例,源文件是(.c) 目标文件是(.obj)
可执行程序是(.exe)

3.文件名

文件标识 == 文件名
文件名包含三个部分:文件路径+文件主干+文件后缀
例如:c:\code\test.txt

二. 二进制文件

数据在内存中以二进制的形式存储,不加转化地输出到外存,就是二进制文件
10000以二进制的形式存储占4个字节

三.文本文件

如果要求在外存上以ASCII码的形式存储,就需要在存储前转化。在外存中以ASCII码的形式存储的就是文本文件
10000以字符的形式存储占5个字节,因为10000有五位嘛

int main()
{
	int a = 10000;
	FILE* pf = fopen("test.txt", "wb");//打开文件
	if (pf == NULL)//文件是空指针提前返回
	{
		perror("fopen");
		return 1;
	}
	//写入
	fwrite(&a,4,1,pf);//在vs上以二进制的形式写入文件中
	fclose(pf);//关闭文件
	pf = NULL;

	return 0;
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
10000的16进制是:00 00 27 10
因为vs上是小端存储:低位的内容存在低地址上
10 27 00 00

四. 文件的打开(fopen)和关闭(fclose)

我们使用文件应该先打开文件,使用完后应该关闭文件
我们使用文件指针来建立文件和指针之间的关系

FILE* pf = fopen(const char*filename,const char* mode);
//filename表示要打开的文件,mode表示文件的打开方式
fclose(FILE* stream);
//stream表示要关闭指针指向的文件
//mode表示打开的模式,(例如以读的形式打开)

在这里插入图片描述

int main()
{
	FILE* pf = fopen("test.txt", "r");//打开文件
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//使用
	//...
	fclose(pf);//关闭文件
	pf = NULL;

	return 0;
}

1.1流是什么

流是抽象出来的一种概念,为了方便程序员读写文件
键盘、文件、硬盘向流中输入数据,我们就可以从流中获取数据
我们一般都是打开流,获取数据或输入数据,然后操作

1.2标准流

我们向键盘上输入数据,然后打印出了内容,为什么并没有打开流?
是因为C语言默认打开三个流:
stdin:标准输入流,大多数情况下用键盘输入,scanf都是从标准输入流中读取数据
stdout:标准输出流,大多数情况下都是输出到显示器界面的,printf输出到标准输出流中
stderr:大多数情况下都是把错误输出到显示器界面的

stdin、stdout、stderr其实是FILE*类型的,他们都是文件指针

int fprintf(FILE* stream,const char* p);
int printf(const char* p);
//printf和fprintf很相似
//向流中输入数据

在这里插入图片描述

int fscanf(FILE*stream,const char* p);
int scanf(const char* p);
//fcanf和fscanf也很相似
//fscanf是向流中读取数据

在这里插入图片描述

2.文件指针

文件指针本质上是一个结构体指针
每个被使用的文件都在内存中开辟一个文件信息区,这些文件信息保存在一个结构体变量中,该结构体变量是由系统声明的
下面以VS2013环境下头文件中的文件类型声明:

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

我们以FILE*的指针来维护这个结构体

FILE* pf

我们用pf这个文件指针来指向某个文件的文件信息区(结构体变量),能通过文件信息区的信息可以访问这个文件,所以可以通过文件指针变量间接地访问与它有关联的文件

在这里插入图片描述

未完待续,敬请期待
创作不易,希望大家多多点赞

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

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

相关文章

上岸美团了!

Hello,大家好,最近春招正在如火如荼,给大家分享一份美团的面经,作者是一份某双非的硕(只如初见668),刚刚通过了美团的3轮面试,已经拿到offer,以下是他的一些分享。 一面&…

9.处理消息边界

网络编程中消息的长度是不太确定的,read方法读取字节数据到ByteBuffer中,ByteBuffer会有一个固定容量,单次超出容量的部分字节数据将会在下一次的ByteBuffer中,这样消息就会按照字节截断,出现消息边界问题。 Http 2.0 …

【pytest、playwright】多账号同时操作

目录 方案实现思路: 方案一: 方案二: 方案实现思路: 依照上图所见,就知道,一个账号是pytest-playwright默认的环境,一个是 账号登录的环境 方案一: 直接上代码: imp…

gtsam::Pose3的compose()函数作用

#include <gtsam/geometry/Pose3.h> #include <iostream> int main(int argc, char** argv) {// B 的旋转量为绕 x 轴旋转 180 度gtsam::Pose3 B gtsam::Pose3(gtsam::Rot3(0, 1, 0, 0), gtsam::Point3(1, 2, 0));// A 的旋转量为绕 z 轴旋转 180 度gtsam::Pose3 A…

MySQL中如何进行多表查询

目录 一、子查询 1.什么是子查询 2.注意事项 二、联结查询 1.什么是联结 2.内部联结&#xff08;等值联结&#xff09; ①WHERE语句 ②ON语句 3.自联结 4.自然联结 5.外部联结 三、组合查询 1.什么是组合查询 2.UNION规则 *本节涉及概念来源于图灵程序设计丛书&a…

latex伪代码一些记录

参考一 参考二 参考三 使用minipage 最终调整好的效果&#xff1a; $ \begin{document} \begin{center} \begin{minipage}{15.92cm} \renewcommand{\thealgorithm}{1} \begin{CJK}{GBK}{song} \begin{algorithm}[H]\caption{ \text{算法1&#xff1a;xxx}}\begin{algorith…

基于SpringBoot和Vue的学生笔记共享平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的学生笔记共享平台的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&…

Linux中断管理:(一)中断号的映射

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 中断控制器 Linux 内核支持众多…

TCP通信——端口转发(重点内容)

实现多人群聊 Client(客户端&#xff09;建立通信 package com.zz.tcp.case1;import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.util.Scanner;public class Client {public static void mai…

Java- maven下载jar包,提示找不到,Could not find artifact

1、执行下面命令行 mvn install:install-file -Dfile/home/quangang/桌面/isv-sdk-2.0.jar -DgroupIdcom.jd -DartifactIdisv-sdk -Dversion2.0 -Dpackangjar 2、然后这里要加上jar包

Linux(CentOS 7 )基于git、maven实现springboot自动化部署

前提 1、已安装git、maven、java环境 不清楚的可以看另一篇文章&#xff1a; https://blog.csdn.net/weixin_44646763/article/details/137041469 2、已为项目设置远程 git 仓库 origin (可以通过&#xff1a;git remote add origin https://github.com/xxx/xxx.git设置) 创…

MCRNet:用于乳腺超声成像语义分割的多级上下文细化网络

MCRNet&#xff1a;用于乳腺超声成像语义分割的多级上下文细化网络 摘要引言方法 MCRNet_ Multi-level context refinement network for semantic segmentation in breast ultrasound imaging 摘要 由于对比度差、目标边界模糊和大量阴影的不利影响&#xff0c;乳腺超声成像中…

基于ssm校园教务系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对校园教务信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

数据结构——优先级队列及多服务台模拟系统的实现

一、优先级队列的定义和存储 优先级队列定义&#xff1a;优先级高的元素在队头&#xff0c;优先级低的元素在队尾 基于普通线性表实现优先级队列&#xff0c;入队和出队中必有一个时间复杂度O(n),基于二叉树结构实现优先级队列&#xff0c;能够让入队和出队时间复杂度都为O(log…

WPF碎片

1、Style作为资源可放在控件自身资源下&#xff0c;也可以放在上级控件下如Window.Resources甚至Application.Resources下&#xff0c;但第二种方法需要加为Style添加key并通过Style"{StaticResource xxx}类似方式调用&#xff0c;而前者控件直接默认使用&#xff1b; 方法…

printf()对浮点数的四舍五入是有问题的!!!

一、问题描述 4.5四舍五入应该是5&#xff0c;8.5四舍五入应该是9 但是printf()函数以".f"和.lf打印&#xff0c;得到的却是4和8 二、问题演示 1、代码 #include<stdio.h> int main() {float f4.5;double d8.5;printf("%.f\n",f);printf("…

C语言实现猜数字游戏(有提示,限制次数版)

这次的猜数字游戏我添加了新的功能&#xff1a;为玩家添加了提示&#xff0c;以及输入数字的限制次数。 首先&#xff0c;我们的猜数字游戏需要一个菜单&#xff0c;来让玩家可以选择玩游戏还是退出游戏&#xff0c;所以我们需要开始就打印一个菜单&#xff1a; int main() {…

Linux之进程间通信

1.进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&#xff…

谷歌商店如何绑定银行卡!通过支付宝!

完整操作视频在B站&#xff1a; https://www.bilibili.com/video/BV1zt421g7pa/?spm_id_from333.337.search-card.all.click&vd_sourceb5a2563a2e562c5165936c011dcfd0a5 谷歌商店怎么支付&#xff01; 谷歌商店主要用来购买游戏和支付app的应用&#xff0c;由于都是采…

蓝桥杯省赛刷题——题目 2656:刷题统计

刷题统计OJ链接&#xff1a;蓝桥杯2022年第十三届省赛真题-刷题统计 - C语言网 (dotcpp.com) 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几…