文件的打开与关闭

2023-10-26

对于文件的打开与关闭,我们可以通过鼠标来控制!!但是,在我们写代码的时候,总不能来用鼠标来打开关闭文件,并且还能将代码放在那个文件里面吧!因此,我们需要一个文件指针来帮助我们来打开和关闭文件!!

1.文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名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;

在上述的代码中,是一个文件指针:typedef struct _iobuf FILE;并且重命名为:FILE   因此,我们就能直接使用FILE这个指针了!!

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

每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息, 使用者不必关心细节

一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

下面我们可以创建一个FILE*的指针变量:

FLIE* pf ;  //文件指针变量

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变 量)。通过该文件信息区中的信息就能够访问该文件。也就是说通过文件指针变量能够找到与它关联 的文件

 上面我们简单的介绍了一下FILE的由来与使用,下面笔者将进入:文件的打开与关闭的方式上:

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

在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指 针和文件的关系。

ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件

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

在打开文件的操作过程中:

const char * filename  :是指文件名!!

const char * mode   : 这个是指:文件的打开方式!!

举列一下:

#include <stdio.h>


int main()
{
	FILE* pf = fopen("tset.txt", "w");

}

经过上面的代码的运行,我们就可以清晰的看到:

因此,这样就是成功的创建并打开了这个文件!!

 当文件成功打开的话,会返回一个地址,当文件打开失败的话,会返回一个NULL(空指针),所以,需要对返回值进行判断!!

下面请看一下笔者的完美打开关闭文件的简单代码:
 

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件!
	//具体内容不再写了!



	//关闭文件
	fclose(pf);
	pf = NULL;  //手动置空(NULL)
	return 0;
}

上述内容,则为正确的打开文件的操作!!要切记:一定要对指针进行是否为空指针的判断!!

下面简述几种文件的打开操作:

更多关于文件的精彩内容,请详见笔者后续更新!本文就先到此为止!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件的打开与关闭 的相关文章

随机推荐

  • npm install生成的package-lock.json文件有什么作用?

    一 package json node modules package lock json是什么 package json里面定义的是版本范围 比如 1 0 0 具体跑npm install的时候安的什么版本 要解析后才能决定 这里面定义的
  • OpenCV4 Android 调用摄像头

    OpenCV4 调用摄像头黑屏问题 OpenCV 调用 Android 摄像头这一块 我之前研究了好几天 都是一片黑 毫无头绪 后来发现 OpenCV4 要想调用摄像头 必须继承自 OpenCV 的 CameraActivity Camer
  • 英语(2)-- 实用口语100句

    Any day will do 哪一天都可以 Any messages for me 有我的留言吗 Are you by yourself 你一个人来吗 All right with you 你没有问题吧 Are you free tomo
  • background-position-x的兼容性问题

    在firefox中 不支持background position x和background position y属性 在ie chrome等流览器则支持该属性 为兼容firefox和 ie 需要将此属性改写成 background posi
  • IIS 日志解析,增强 IIS 服务器安全性

    企业严重依赖 Microsoft Internet 信息服务 IIS 服务器来托管其网页和 Web 应用程序 以及存储其文件 请务必妥善保护您的 IIS 服务器 包括 Web 和 FTP 什么是 IIS 日志 IIS 日志是 Microso
  • MATLAB神经网络43个案例分析——BP网络数据分类

    小论文 主要工作 BP神经网络MATLAB实现 这个例子有24个特征 网络是24 25 4的结构 详细了解程序 看明白了并且用matlab看变量的变化 加深了理解 后续目标 自己写出一个训练BP的网络 测试成功率 加深理解 便于后期自己制作
  • Unity开发(一)——各种坑集合

    1 unity的vs项目无法打开 2 不安全代码只会在使用 unsafe 编译的情况下出现 3 unity各菜单含义
  • Oracle查看总数据量大小

    Oracle查看总数据量大小 select round sum bytes 1024 1024 1024 total data size from dba segments where segment name not like BIN
  • SqlServer的bit类型

    SqlServer的bit类型比较特殊 在SQL Server 中 图形化界面时 显示的是true false 输入也是true false 用T SQL语句select查询出来的结果是1 0 使用T SQL语句时可以用1 0 也可以用tr
  • 王峰十问Nervos联合创始人王宁宁:缘何“中国最懂以太坊的人”要走中国公链的自主创新之路?...

    本文旨在传递更多市场信息 不构成任何投资建议 文 王峰十问 出品 火星财经APP ID hxcj24h 11月7日晚8点 王峰十问第36期 惊蛰 中国公链如何实现自主创新 在火星财经社群展开 这也是 王峰十问中国公链 系列正式启动的第1期
  • 博易大师行情服务器文件夹,博易大师目录

    c program files pobo settings这个目录下的东西是pobo的参数设置这个路径是可以改的具体在pobo安装路径下有个cfg子目录里面有个userpath ini文件内容就是pobo settings的生成路径第一次运
  • TCP 多线程——一个服务器被多个客户端连接

    为了使一个服务器端能被多个客户端连接我们采用线程的方法 服务器创建一个线程之后 打开的套接字就被线程所继承 线程可以和连接的客户进行通信 而主线程 主服务器 可以继续接受以后的客户连接 即Accept之后产生一个c 然后将c传递给新创建线程
  • Visual C++ 2008 Feature Pack 开发包

    http download csdn net detail fandh 1018063 Visual C 2008 Feature Pack 开发包
  • 使用 Skeleton Screen 提升用户感知体验

    1024程序猿节 愿世界和平 没有bug 腾讯云社区向改变世界的程序猿致敬 作者 陈纬杰 一直以来 无论是web还是iOS android的应用中 为了提升应用的加载等待这段时间的用户感知体验 各种奇门遁甲之术层出不穷 其中 菊花图以及由它
  • 【满分】【华为OD机试真题2023 JAVA&JS】硬件产品销售方案

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 硬件产品销售方案 知识点递归数组DFS搜索回溯 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 某公司目前推出了AI开发者套件 AI加速卡 AI加速模块 AI服务
  • 可以改动的option组件_MySQL的validate_password插件/组件总结

    Password Validation插件和组件 在MySQL 8 0之前 MySQL使用的是validate password插件 plugin 检测 验证账号密码强度 保障账号的安全性 而到了MySQL 8 0 引入了服务器组件 Com
  • c高级 day4

    实现一个对数组求和的函数 数组通过实参传递给函数 bin bash read p 请输入数组 a arr function sum sum 0 for i in arr do sum sum i done echo 数组和 sum sum
  • ubuntu nginx服务器安装SSL证书

    证书安装 前往 SSL 证书管理控制台中下载 SSL 证书 名称以 bdjw work 为例 文件压缩包 并解压到本地目录 解压缩后 可获得相关类型的证书文件 文件内容 bdjw work bundle crt 证书 bdjw work k
  • MySQL 高级原理: MySQL执行过程及执行顺序

    一 MySQL执行过程 MySQL整体的执行过程如下图所示 1 1 连接器 1 1 1连接器的主要职责 1 负责与客户端的通信 是半双工模式 这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据 而不能同时进行 其中My
  • 文件的打开与关闭

    对于文件的打开与关闭 我们可以通过鼠标来控制 但是 在我们写代码的时候 总不能来用鼠标来打开关闭文件 并且还能将代码放在那个文件里面吧 因此 我们需要一个文件指针来帮助我们来打开和关闭文件 1 文件指针 缓冲文件系统中 关键的概念是 文件类