【C语言】文件操作(一)

在这里插入图片描述

前言
本篇博客讲解对文件的操作,包括打开,关闭操作。在下篇博客将讲解文件的读写。


文章目录

  • 一、 什么是文件?
    • 1.1 用于存储数据
    • 1.2 文件类型
    • 1.3 文件名
    • 1.4 二进制文件和文本文件
  • 二、文件的打开和关闭
    • 2.1 流和标准流
    • 2.2 文件指针
    • 2.3文件的打开与关闭

一、 什么是文件?

1.1 用于存储数据

文件是计算机系统中用于存储数据的基本单位。它可以包含文本、图像、音频、视频等各种类型的信息。文件通常以某种特定的格式存储,这个格式决定了文件中数据的组织方式,以及如何解释和处理这些数据。


1.2 文件类型

在计算机编程和脚本语言中,通常会使用多种类型的文件。以下是一些常见的文件类型:

  • 源代码文件: 这些文件包含程序员编写的源代码,通常使用特定的编程语言编写。这些文件以不同的文件扩展名结尾,例如:
    C/C++源文件:.c /.cpp
    Java源文件:.java
    Python源文件:.py
  • 头文件: 在某些编程语言中,头文件包含了程序中使用的函数、变量和数据结构的声明。它们通常以特定的文件扩展名结尾,如:
    C/C++头文件:.h
  • 文本文件: 文本文件包含人类可读的文本信息,例如文档、日志文件、报告等。它们可以使用各种文本编辑器进行编辑和查看。
  • 二进制文件: 二进制文件包含非文本数据,例如图像、音频、视频、可执行文件等。这些文件不是人类可读的,而是由计算机程序进行解释和处理。

还有许多种文件类型,这里不再一一列举。


1.3 文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。

⽂件名包含3部分:⽂件路径+⽂件名主干+⽂件后缀
例如:c:\code\test.txt

为方便起见,文件标识常被称为文件名。

1.4 二进制文件和文本文件

数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存,就是⼆进制文件
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是文本文件
在这里插入图片描述


二、文件的打开和关闭

2.1 流和标准流

在计算机编程和操作系统中,**“流”(stream)是一种用于在程序之间传输数据的抽象概念。**流可以用于输入(读取数据)和输出(写入数据),它们通常表示为一个序列化的数据流,可以是字节、字符或其他数据单元的连续流。

有两种主要类型的流:输入流和输出流。此外,有一种特殊类型的流称为标准流,它用于在程序和操作系统之间进行标准输入和标准输出。

  1. 输入流: 用于从外部源(如文件、键盘、网络连接)读取数据到程序中,使程序能够处理这些数据。输入流通常是单向的,只允许从源读取数据。常见的输入流操作包括从文件中读取数据、从键盘读取用户输入。
  2. 输出流: 用于将程序中的数据写入到外部目标(如文件、屏幕、网络连接)中,以供其他程序或用户查看或使用。输出流通常也是单向 的,只允许向目标写入数据。常见的输出流操作包括将数据写入文件、在屏幕上显示信息。
  3. 标准流: 用于与操作系统进行交互。它包括三个标准流(在C语言中标准流i是默认打开的不需要显式打开或关闭它们):
    • stdin - 标准输⼊流,在⼤多数的环境中从键盘输⼊。
    • stdout - 标准输出流,⼤多数的环境中输出至显示器界⾯。
    • stderr - 标准错误流,标准错误流通常用于显示程序执行期间的错误消息,而不是正常的输出。

2.2 文件指针

文件操作通常涉及到内存中的一个FILE结构体变量,该结构体用于存储有关打开文件的相关信息。这个FILE结构体类型是由C标准库(如 <stdio.h>)定义的。

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;//将struct _iobuf重命名为FILE
//以上是在C语言标准库中声明的,我们只需使用即可FILE* pf1;//创建⽂件指针变量,pf是⼀个指向FILE类型数据的指针变量。

这些成员的确切定义和实现可能因操作系统和编译器的不同而有所不同。每当打开⼀个⽂件的时候,系统会根据⽂件的情况⾃动创建⼀个FILE结构的变量,并填充其中的信息,使⽤者不必关心细节。在这里插入图片描述


2.3文件的打开与关闭

在读写文件时,需要先打开文件,然后进行读写,最后需要关闭文件
在打开和关闭文件时,需要用到两个函数fopenfclose

//打开⽂件
FILE * fopen ( const char * filename, const char * mode );//filename是文件名,mode表示文件打开的模式//关闭⽂件
int fclose ( FILE * stream );//stream是一个文件指针

文件打开模式, 如下:

文件使用方式含义如果指定文件不存在
“r”(只读)为了输⼊数据,打开⼀个已经存在的⽂本⽂件出错
“w”(只写)为了输出数据,打开⼀个⽂本⽂件建⽴⼀个新的⽂件
“a”(追加)向⽂本⽂件尾添加数据建⽴⼀个新的⽂件
“rb”(只读)为了输⼊数据,打开⼀个⼆进制⽂件出错
“wb”(只写)为了输出数据,打开⼀个⼆进制⽂件建⽴⼀个新的⽂件
“ab”(追加)向⼀个⼆进制⽂件尾添加数据建⽴⼀个新的⽂件
“r+”(读写)为了读和写,打开⼀个⽂本⽂件出错
“w+”(读写)为了读和写,建议⼀个新的⽂件建⽴⼀个新的⽂件
“a+”(读写)打开⼀个⽂件,在⽂件尾进⾏读写建⽴⼀个新的⽂件
“rb+”(读写)为了读和写打开⼀个⼆进制⽂件出错
“wb+”(读写)为了读和写,新建⼀个新的⼆进制⽂件建⽴⼀个新的⽂件
“ab+”(读写)打开⼀个⼆进制⽂件,在⽂件尾进⾏读和写建⽴⼀个新的⽂件

示例:

/* fopen fclose example */
#include <stdio.h>
int main(){FILE* pFile;//打开⽂件pFile = fopen("myfile.txt", "w");//"w"表示只写//⽂件操作if (pFile != NULL){fputs("fopen example", pFile);//关闭⽂件fclose(pFile);}return 0;
}

在这里插入图片描述
如果你喜欢这篇文章,点赞👍+评论+关注⭐️哦!
欢迎大家提出疑问,以及不同的见解。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你的周末和你一起失去了价值(打工人篇)

花儿在绽放盛开之前&#xff0c;会在无人的清晨吸收甘露&#xff0c;然后赶上第一趟的朝阳&#xff0c;才换来路人赞许 一言指南北 选择你的职业&#xff0c;确认你的方向&#xff0c;没有方向&#xff0c;就无法体验时间感 如果你是打工人&#xff0c;那么请接着往下看 如果是…

React项目中如何实现一个简单的锚点目录定位

小册 这是我整理的学习资料&#xff0c;非常系统和完善&#xff0c;欢迎一起学习 现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 linwu的算法笔记&#x1f4d2; 前言 锚点目录定位功能在长页面和文档类网站中非常常见,它可以让用户快速定位到页面中的某个…

GLTF编辑器也可以转换GLB模型

1、GLB模型介绍 GLB&#xff08;GLTF Binary&#xff09;是一种用于表示三维模型和场景的文件格式。GLTF是"GL Transmission Format"的缩写&#xff0c;是一种开放的、跨平台的标准&#xff0c;旨在在各种3D图形应用程序和引擎之间进行交换和共享。 GLB文件是GLTF文件…

Java之线程的详细解析一

实现多线程 简单了解多线程【理解】 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 并发和并行【理解】 并行&#xff1a;在同一时刻&#xff0c;有多个指令在多个CPU上同时执行…

【excel密码】如何给excel设置带有密码的只读模式

大家提起只读模式&#xff0c;应该都不会联想到密码&#xff0c;想起excel密码可能会想到打开密码或者工作表保护。今天给大家分享如何设置带有密码的只读模式。 打开excel文件&#xff0c;将文件进行【另存为】设置&#xff0c;然后停留在保存路径的界面中&#xff0c;我们点…

SourceTree 账号或者密码输入错误 Incorrect username or password ( access token )解决办法

修改来修改去一直解决不了&#xff0c;那就试试查看一下源文件记录的账号密码吧&#xff01;

谷器数据参加世界制造业大会及数字化转型高峰论坛

9月20日至24日&#xff0c;由工业和信息化部、科技部、商务部、国务院国资委、中国工程院、安徽省人民政府等单位组织共同主办的2023世界制造业大会在合肥市滨湖国际会展中心盛大举行。谷器数据受邀出席&#xff0c;并同期参加”数字化转型高峰论坛”&#xff0c;与国家工信部相…

自定义热加载:如何不停机实现核心代码更新

文章目录 1. 常见的几种实现代码热更新的几种方式对于开发环境我们可以使用部署环境1. 使用 Arthas 的 redefine 命令来加载新的 class 文件2. 利用 URLClassLoader 动态加载3. 通过Java的Instrumentation API 也是可以实现的 2. 实现1. ClassScanner扫描目录和加载类2. 定时任…

十六,镜面IBL--预滤波环境贴图

又到了开心的公式时刻了。 先看看渲染方程 现在关注第二部分&#xff0c;镜面反射。 其中 这里很棘手&#xff0c;与输入wi和输出w0都有关系&#xff0c;所以&#xff0c;再近似 其中第一部分&#xff0c;就是预滤波环境贴图&#xff0c;形式上与前面的辐照度图很相似&#…

离线环境harbor 搭建及使用

一 摘要 本文主要介绍harbor 的安装及使用。 二 环境信息及部署图 2.1 环境信息 名称版本备注操作系统centos7.9容器docker 23.0.1harbor2.7代理nginx待补充 2.2 架构图 说明&#xff1a; 1.harbor 核心服务里有个nginx &#xff0c;也可以用该nginx 做代理 2.proxy-ngin…

ISP图像信号处理——平场校正介绍以及C++实现

参考文章1&#xff1a;http://t.csdn.cn/h8TBy 参考文章2&#xff1a;http://t.csdn.cn/6nmsT 参考网址3&#xff1a;opencv平场定标 - CSDN文库 平场校正一般先用FPN(Fixed Pattern Noise)固定图像噪声校正,即暗场校正&#xff1b;再用PRNU(Photo Response Non Uniformity)…

自动化测试-友好的第三方库

目录 mock furl coverage deepdiff pandas jsonpath 自动化测试脚本开发中&#xff0c;总是会遇到各种数据处理&#xff0c;例如MOCK、URL处理、JSON数据处理、结果断言等&#xff0c;也会遇到所采用的测试框架不能满足当前需求&#xff0c;这些问题都需要我们自己动手解…

IP地址定位的特点

IP地址定位是一种广泛应用于网络领域的技术&#xff0c;它允许我们确定特定设备或用户在互联网上的位置。这项技术在很多方面都具有重要的特点&#xff0c;本文将深入探讨这些特点。 1.全球性覆盖&#xff1a; IP地址定位IP66_ip归属地在线查询_免费ip查询_ip精准定位平台具有全…

通信协议:Uart的Verilog实现(下)

4、UART接收器 UART接收器负责接收串行比特流&#xff0c;去除起始位和停止位&#xff0c;并以并行格式将数据保存到与主机数据总线相连的寄存器里。接收器无法获得发送时钟&#xff0c;因此尽管数据以标准比特率到达&#xff0c;但数据未必与接收主机内的时钟同步。同步问题可…

LaTex模板免费下载网站

LaTex模板免费下载网站 在进行文档排版时候&#xff0c;有时需要对不同类型文章的格式进行编辑&#xff0c;本博文推荐一个免费下载LaTex模板的网站。 一、网站地址 链接: LaTex模板网址&#xff1a;http://www.latextemplates.com/ 二、模板类型 模板类型如图2和图3所示。…

Ctfshow web入门 phpCVE篇 web311-web315 详细题解 全

CTFshow phpCVE web311 CVE-2019-11043 PHP远程代码执行漏洞复现&#xff08;CVE-2019-11043&#xff09;【反弹shell成功】-腾讯云开发者社区-腾讯云 (tencent.com) 漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞&#xff0c;使用某些特定配置的 Nginx PHP-FPM 的服务…

程序开发常用在线工具汇总

菜鸟工具# https://c.runoob.com/ 编码# ASCII码# https://www.habaijian.com/ 在线转换# https://www.107000.com/T-Ascii/http://www.ab126.com/goju/1711.html Base64# 在线转换# https://www.qqxiuzi.cn/bianma/base64.htmhttp://www.mxcz.net/tools/Unicode.aspx …

【Html】用CSS定义咖啡 - 咖啡配料展示

显示效果 代码 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>CodePen - For The Love Of Coffee</title><link rel"stylesheet" href"./style.css">&l…

Java中的IO流的缓冲流

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;IO流体系结构&#x1f334;缓冲流1.提高效率的原理2.缓冲流的类型3.字符缓冲流两个特有方法 &#x1f334;总结 &#x1f334;IO流体系…

民企再续“助学故事”,恒昌公益两所“云杉校园”如何聚木成林?

撰稿|多客 来源|贝多财经 “生物世界丰富多彩、五花八门、琳琅满目&#xff0c;可谓大千世界芸芸众生”……这是遵义市正安县安场镇光明完全小学图书馆收藏的一本名为《闯入生物世界》书中所写景象。 在这所学校&#xff0c;课外书籍按照年级及类别进行划分&#xff0c;如一…