C语言:文件操作(一)

news2024/11/20 23:23:25

目录

前言

1、为什么使用文件

2、什么是文件

2.1 程序文件

2.2 数据文件

2.3 文件名

3、文件的打开和关闭

3.1 文件指针

3.2 文件的打开和关闭

结(一)


前言

        本篇文章将介绍C语言的文件操作,在后面的内容讲到:为什么使用文件;什么是文件;文件的打开和关闭;文件的顺序读写;文件的随机读写;文本文件和二进制文件;文件读取和结束的判定;文件缓冲区。详细讲述了C语言的文件操作。此内容将分成三篇讲解,这是第一篇。

1、为什么使用文件

        在C语言中,一个程序中的数据,在其运行完成后会被自动销毁,而我们如果想把程序运行后的数据保存起来的话,就需要用到文件操作,将运行出来的结果放到文件中,电脑就会将其存放到硬盘上,实现了数据的持久化。

2、什么是文件

         硬盘上的文件是文件。

        但在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从功能的角度来分类的)。

2.1 程序文件

        以.c结尾的源程序文件;以.obj结尾的目标文件;以.exe结尾的可执行程序。

2.2 数据文件

        文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

        本章讨论的是数据文件。

2.3 文件名

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

        文件名包含3部分:文件路径+文件名主干+文件后缀

        例如:c:\code\test.txt

        为了方便起见,文件标识常被成为文件名

3、文件的打开和关闭

3.1 文件指针

        缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”

        每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.

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

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

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

FILE* pf;

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

        比如:

3.2 文件的打开和关闭

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

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

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

        fopen函数参数有两个,第一个是文件的名称,第二个是打开方式。文件的打开方式有五种:

        包括:r:读;w:写;a;r+;w+;a+。

         fopen函数的返回类型为:FILE*。

        举个例子:

#include <stdio.h>
int main()
{
	FILE* pf = fopen("test.exe", "w");

	return 0;
}

        这样我们就以写的方式打开了名为test.exe的文件。注意,有可能打开文件失败,所以在使用fopen之后,应该加上一个判断语句,判断fopen是否打开成功。当fopen打开文件失败后,它会返回一个空指针,因此我们可以这样判断:

	if (NULL == pf)
	{
		printf("%s\n", strerror(errno));
		return 1;
	}

        通过这个判断我们就可以知道文件是否成功打开。如果没有成功打开,则会返回失败原因。注意,在使用对应函数时应包含其对应头文件,如printf头文件stdio.h;strerror头文件string.h;errno头文件errno.h。

        效果:

        我以读的方式打开了一个名叫test1.exe的文件,运行后告诉我没有这样的文件。

        在使用完文件后我们还需要关闭文件:fclose

        程序:

	fclose(pf);
	pf = NULL;

        这样就关闭了文件,记得最后将pf赋值为NULL,不然它会成为一个野指针。

        整个程序的框架:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main()
{
	//打开文件
	FILE* pf = fopen("test1.exe", "r");
	if (NULL == pf)
	{
		printf("%s\n", strerror(errno));
		return 1;
	}
	//使用文件
	
	//......

	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

        这样就是一套完整的文件的使用框架。

结(一)

        本篇内容先介绍到这里,后续会在下一篇文章中讲解。希望对大家有所帮助。

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

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

相关文章

2024-04-03 NO.4 Quest3 手势追踪抓取物体

文章目录 1 手势抓取方式1.1 Hand Grab1.2 Touch Hand Grab1.3 Distance Hand Grab 2 HandGrabExamples 示例场景2.1 Interactor 对象2.2 Interactable 对象2.2.1 父子结构2.2.2 “Hand Grab lnteractable” 脚本2.2.3 “Move Towards Target Provider” 脚本2.2.4 其他 Moveme…

OpenHarmony实战:CMake方式组织编译的库移植

以double-conversion库为例&#xff0c;其移植过程如下文所示。 源码获取 从仓库获取double-conversion源码&#xff0c;其目录结构如下表&#xff1a; 表1 源码目录结构 名称描述double-conversion/cmake/CMake组织编译使用到的模板double-conversion/double-conversion/源…

浅谈分布式光伏电站的运维管理

摘要&#xff1a;随着近些年我国对节能降耗关注力度的持续加大&#xff0c;为满足人们不断增长的电能需求&#xff0c;光伏发电产业得到迅猛发展&#xff0c;其中分布式光伏发电的比重持续增长。在打赢脱贫攻坚战的大背景下&#xff0c;国家电网公司探索出一条“阳光扶贫”的扶…

第十三届蓝桥杯JavaA组省赛真题 - 青蛙过河

解题思路&#xff1a; 定义一个累和数组arr&#xff0c;我们可以比较arr[ i ]和arr[ l ]之间的差值看是否大于等于2倍的x&#xff0c;满足则证明这两点之间可以跳满所有实际过河次数&#xff0c;此时记录最大距离&#xff0c;并移动左边界 l import java.util.Scanner;public…

大数据时代下,如何利用信息化、数字化、数智化成为行业领先者

在大数据时代背景下&#xff0c;企业的竞争力提升离不开信息化、数字化和数智化的联动作用。首先&#xff0c;企业需通过信息化手段&#xff0c;将业务流程、管理方式等进行标准化和系统化&#xff0c;提高效率和减少错误。同时&#xff0c;借助数字化技术如云计算、物联网等&a…

抖店体验分是什么?怎么快速提升体验分?今天一篇带你搞懂!

大家好&#xff0c;我是电商小布。 经营小店的小伙伴应该都有发现&#xff0c;当自己的店铺成功出够30单之后&#xff0c;小店就会出现体验分这个东西。 简单来说&#xff0c;这个就相当于是对我们店铺的一个综合评价&#xff0c;包括有商品、物流、服务三个方面。 这个分数…

前端作业之完成学校官方网页的制作

&#xff08;未使用框架&#xff0c;纯html和css制作&#xff09; 注&#xff1a;由本人技术限制&#xff0c;代码复用性极差 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>xxx大学</tit…

java框架学习——注解/元注解概述及使用案例

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup!!! 注解 注解&#xff08;Annotation&#xff09;是java代码里的特殊标记。作用为&#xff1a;让其他程序根据注解信息来决定怎么执行该程序&#xff0c;如&#xff1a;Override,Test等。同时可以根…

换到idf 5.0版本后报错 jsmn could not be found

原因&#xff1a; idf5.0去掉了部分组件&#xff0c;包括jsmn&#xff0c;工程中adf又用到了这个组件&#xff0c;所以会报错。 解决办法&#xff1a; 升级adf到新版本即可。

从C到C++过渡知识 中(为什么C++支持函数重载,而C不支持函数重载)

感谢大家的阅读&#xff0c;这篇文章我们接着了解C对于C的一些优化。 函数重载 了解C这个特殊用法之前&#xff0c;我们先考虑一个问题&#xff0c;如何交换两个整数。相信大家一定信手捏来&#xff0c;实参传地址而非变量&#xff0c;于是可以写出如下函数。 void Swap(int*…

无极低码:免费版部署操作指南

无极低码 :https://wheart.cn 无极低码:免费试用版部署过程参照: 无极低码部署版操作指南 https://wheart.cn/so/home?m=index&id=ad614930-d936-11ee-8489-525400be6368 ” 。 下载完解压成后进行部署

Codeforces Round 837 (Div. 2) C. Hossam and Trainees

题目 #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; const int N sqrt(1…

硬件RAID横评(上)

正文共&#xff1a;3857字 50图&#xff0c;预估阅读时间&#xff1a;12 分钟 之前误打误撞测试了软件RAID&#xff08;Windows下软RAID测试&#xff09;&#xff0c;发现性能基本上是线性的&#xff0c;而据说硬件RAID性能比这个高的很。那本文将就硬件RAID展开测试&#xff0…

【leetcode】 c++ 数字全排列, test ok

1. 问题 2. 思路 3. 代码实现 #if 0 class Solution { private:vector<int> path; // 满足条件的一个结果 vector<vector<int>> res; // 结果集 void backtracking(vector<int> nums, vector<bool> used){// 若path的个数和nums个数相等,说明…

C++中的vector与C语言中的数组的区别

C中的vector和C语言中的数组在很多方面都有所不同&#xff0c;以下是它们之间的一些主要区别&#xff1a; 大小可变性&#xff1a; vector是C标准模板库&#xff08;STL&#xff09;提供的动态数组容器&#xff0c;它的大小可以动态增长或减少。这意味着你可以在运行时添加或删…

JavaScript高级 —— 学习(三)

目录 一、深入面向对象 &#xff08;一&#xff09;面向对象介绍 &#xff08;二&#xff09;面向对象编程 &#xff08;oop&#xff09; 1.面向对象编程介绍 2.面向对象编程优点 3.面向对象的特征 4.和面向过程编程对比 二、构造函数 &#xff08;一&#xff09;介绍…

STM32 移植 LVGL -- 教程图解

&#xff08; 编辑状态中&#xff0c;已完成80%&#xff0c;估计清明假期后完成更新 ) 移植效果&#xff0c;先睹为快&#xff1a; 目录 一、LVGL 简述 二、准备一个STM32的工程 三、LVGL 官方下载 四、裁剪 源文件 五、添加 源文件 六、注册 显示 七、注册 触摸输入 八…

014——超声波模块驱动开发Plus(基于I.MX6uLL、SR04和poll机制)

目录 一、基础知识 二、分析为什么打印会影响中断 三、驱动程序 四、应用程序 五、验证及其它 一、基础知识 013——超声波模块驱动开发&#xff08;基于I.MX6uLL与SR04&#xff09;-CSDN博客 二、分析为什么打印会影响中断 asmlinkage __visible int printk(const ch…

如何在本地搭建集成大语言模型Llama 2的聊天机器人并实现无公网IP远程访问

文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛&#xff0c;包括聊天机…

Python字典操作

假设我们有一个学生信息数据库&#xff0c;其中存储了每个学生的姓名、年龄、性别和成绩。我们可以使用字典来表示每个学生的信息&#xff0c;并将所有学生存储在一个字典列表中。 设计者&#xff1a;ISDF 版本&#xff1a;v1.0 日期&#xff1a;03/29/2024# 定义学生信息字典列…