c语言-文件

11 文件

目录

11 文件

一、文件系统

二、文件操作方式

1、基于缓冲区文件操作

2、基于非缓冲区文件操作

三、文件操作的常用函数

1、fopen

2、fclose

3、fputc

4、fgetc

5、rewind

6、fseek

7、fputs

8、fgets

9、fwrite

10、fread

11、fprintf

12、fscanf

13、feof

14、ftell

实战:


一、文件系统

  • 文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。

  • 文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。

alt text

--  文件形式:

  • ascall码形式存储

  • 二进制文件流形式存储

二、文件操作方式

1、基于缓冲区文件操作

(1)运行内存<->缓冲区<->磁盘

(2)缓冲区:

  • 标准输入缓冲区 --stdin

  • 标准输出缓冲区 -- stdout

  • 标准错误缓冲区 --stderr

2、基于非缓冲区文件操作

三、文件操作的常用函数

1、fopen

函数功能:打开文件

函数头文件:#include<stdio.h>

函数原型:FILE *fopen(const char *pathname,const hcar *mode);

函数参数:

  • pathname:要打开的文件名称         -- 路径/文件         -- 字符串形式

  • mode:打开文件的模式 --字符串形式

        1. r         -- 只读,若文件不存在,报错

        2. w         -- 只写,若文件存在,覆盖,若文件不存在,创建文件

        3. a         -- 追加,若文件存在,在文件末尾追加,若文件不存在,创建文件

        6. a+,r+,w+         -- 读写操作,依然保留原特性

函数返回值:

  • 打开的文件描述指针 -- FILE *

alt text

#include "stdio.h"int main(int argc, char const *argv[])
{if(argc<=1){printf("未填写目标文件!\n");}FILE *fp = fopen(argv[1],"w");if(fp == NULL){perror("fopen");return 0;}printf("文件打开成功!\n");return 0;
}

2、fclose

函数功能:关闭文件

函数头文件:#include<stdio.h>

函数原型:int fclose(FILE *stream);

函数参数:

  • stream         --要关闭的文件指针

函数返回值:成功返回0,失败返回-1

#include "stdio.h"int main(int argc, char const *argv[])
{if(argc<=1){printf("未填写目标文件!\n");}FILE *fp = fopen(argv[1],"w");if(fp == NULL){perror("fopen");return 0;}printf("文件打开成功!\n");int res = 1;res = fclose(fp);if(res){perror("fclose");return 0;}printf("文件关闭成功!\n");return 0;
}

3、fputc

函数功能:向文件写入一个字符

函数头文件:#include<stdio.h>

函数原型:int fputc(int c,FILE *stream);

函数参数:

  • c                   -- 要写入的字符

  • stream          -- 要写入的文件指针

函数返回值:成功返回写入的字符,失败返回EOF

4、fgetc

函数功能:从文件读取一个字符到程序中

函数头文件:#include<stdio.h>

函数原型:int fgetc(FILE *stream);

函数参数:

  • stream            -- 要读取的文件指针

函数返回值:

         --  返回读取的字符内容

5、rewind

函数功能:移动光标到首位

函数头文件:#include<stdio.h>

函数原型:void rewind(FILE *stream);

函数参数:

  • stream              -- 文件指针

函数返回值:无

6、fseek

函数功能:移动光标到指定位置

函数头文件:#include<stdio.h>

函数原型:int fseek(FILE *stream,long offset,int whence);

函数参数:

  • stream -- 文件指针

  • offset -- 指针偏移量 -- 正数:向右偏移 负数:向左偏移

  • whence -- 指针位置

1.SEEK_SET -- 文件开头

2.SEEK_CUR -- 文件当前位置

3.SEEK_END -- 文件末尾

函数返回值:成功返回0,失败返回-1

注:这些宏定义其实就是枚举,他们也可写成0,1,2。

7、fputs

函数功能:向文件写入一个字符串

函数头文件:#include<stdio.h>

函数原型:int fputs(const char *s,FILE *stream);

函数参数:

  • s -- 要写入的字符串

  • stream -- 要写入的文件指针

函数返回值:成功返回0,失败返回-1

8、fgets

函数功能:从文件读取一个字符串到程序中

函数头文件:#include<stdio.h>

函数原型:char *fgets(char *s,int size,FILE *stream);

函数参数:

  • s -- 要读取的字符串存放地址

  • size -- 要读取的字符长度

  • stream -- 要读取的文件指针

函数返回值:

-- 返回读取的字符串存放地址

9、fwrite

函数功能:向文件中写入一块数据

函数头文件:#include<stdio.h>

函数原型:size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);

函数参数:

  • ptr -- 要写入的数据首地址

  • size -- 要写入的字符长度

  • nmemb -- 要写入的块数

  • stream -- 文件指针

函数返回值:不用

注:这里的一块数据可以是字符串,数组,结构体等

10、fread

函数功能:从文件读取一块字符串到程序中

函数头文件:#include<stdio.h>

函数原型:size_t fread(const void *ptr,size_t size,size_t nmemb,FILE *stream);

函数参数:

  • ptr -- 要读取的数据首地址

  • size -- 要读取的字符长度

  • nmemb -- 要读取的块数

  • stream -- 文件指针

函数返回值:不用

注:这里的一块数据可以是字符串,数组,结构体等。

11、fprintf

函数功能:向文件写入格式化字符串

函数头文件:#include<stdio.h>

函数原型:int fprintf(FILE *stream,const char *format,......);

函数参数:

  • stream           -- 文件指针

  • format            -- 格式化字符串              -- 写出的数据格式

  • ......                -- 要写入的变量

函数返回值:不用

12、fscanf

函数功能:从文件读取格式化字符串

函数头文件:#include<stdio.h>

函数原型:int fscanf(FILE *stream,const char *format,......);

函数参数:

  • stream -- 文件指针

  • format -- 格式化字符串 -- 写入的数据格式

  • ...... -- 要读取的变量

函数返回值:不用

13、feof

函数功能:判断文件是否到达末尾

函数头文件:#include<stdio.h>

函数原型:int feof(FILE *stream);

函数参数:

  • stream -- 文件指针

函数返回值:

末尾 -- 1 不在末尾 -- 0

14、ftell

函数功能:获取光标位置 -- 若光标在

函数头文件:#include<stdio.h>

函数原型:long ftell(FILE *stream);

函数参数:

  • stream -- 文件指针

函数返回值:

-- 光标距离首位的距离 -- 在末尾则表示文件的大小

实战:

重点掌握一下函数:

  • 打开文件                  -- fopen

  • 写出文件内容           -- fwrite / fprintf(可以格式化写入,不会出现乱码)

  • 移动光标位置           -- fseek

  • 读取文件内容           -- fread/fscanf(可以格式化读出,不会出现乱码)

  • 关闭文件                  -- fclose

注:

        先将文件打开,如果没有会自动创建,然后将文件内容写入,移动光标位置,读取文件内容,最后关闭文件。这里要移动光标的目的是在写完文件后,如果不重新打开文件,光标会停在文件末尾,这样读取文件内容时,读取不到任何东西。而重新打开后,光标就会移到文件的开头,但是这样太多复杂,可以直接用fseek来移动光标位置。

#include "stdio.h"int main(int argc, char const *argv[])
{if(argc<=1){printf("未填写目标文件!\n");}FILE *fp = fopen(argv[1],"w");if(fp == NULL){perror("fopen");return 0;}printf("文件打开成功!\n");//写char *str = "hello";fprintf(fp,"%s",str);//移动光标位置fseek(fp,0,SEEK_SET);//读fscanf(fp,"%s",str);printf("%s\n",str);int res = 1;res = fclose(fp);if(res){perror("fclose");return 0;}printf("文件关闭成功!\n");return 0;
}

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

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

相关文章

【Redis】数据结构篇

文章目录 键值对数据库是怎么实现的&#xff1f;动态字符串SDSC 语言字符串的缺陷SDS结构设计 整数集合整数集合结构设计整数集合的升级操作 哈希表哈希表结构设计哈希冲突链式哈希Rehash渐进式rehashrehash触发条件 压缩列表压缩列表结构设计连续更新压缩列表的缺陷 quicklist…

【Material-UI】Checkbox组件:Indeterminate状态详解

文章目录 一、什么是Indeterminate状态&#xff1f;二、Indeterminate状态的实现1. 基本用法示例2. 代码解析3. Indeterminate状态的应用场景 三、Indeterminate状态的UI与可访问性1. 无障碍设计2. 用户体验优化 四、Indeterminate状态的最佳实践1. 状态同步2. 优化性能3. 提供…

ubuntu20.04 环境搭建教程

1&#xff1a; Ubuntu 版本说明 我使用版本为 ubuntu20.04 ->镜像文件网上下载最新版本 mirrors.huaweicloud.com/ubuntu-releases/20.04.6/ Ubuntu 其他说明 Ubuntu 安装的位置不建议放到 C 盘(除非你只有一个 C 盘) Ubuntu 需要 120G 的空间 2&#xff1…

vue项目前端实现将table导出成excel功能2

使用插件 xlsx、xlsx-style、file-saver 具体引入见文章&#xff1a;vue项目前端实现将table导出成excel功能1 方法一 exportExcelByData&#xff1a;将数据导出成excel&#xff0c;合并单元格需要另外设置 方法二 exportExcelByDom&#xff1a;将页面dom(el-table)导出成…

媒体资讯视频数据采集-yt-dlp-python实际使用-下载视频

对于视频二创等一些业务场景&#xff0c;可能要采集youtube等的相关媒体视频资源&#xff0c;使用[yt-dlp](https://github.com/yt-dlp/yt-dlp)是一个不错的选择&#xff0c;提供的命令比较丰富&#xff0c;场景比较全面yt-dlp 是一个用 Python 编写的命令行工具&#xff0c;主…

Linux部署python3.0版本——及基本操作

&#xff08;一&#xff09;部署环境 首先查看列表&#xff0c;找到python3.0的包 yum list installed|grep python 如果没有&#xff0c;是因为yum源的问题&#xff0c;可部署阿里云镜像然后下载epel包&#xff0c;这里的内容可参考前面的阿里云镜像部署 然后进行下载 yum…

React 用户点击某个元素后只执行一次操作

React开发中经常会遇到需求&#xff1a;用户点击某个元素后只执行一次特定操作。比如&#xff0c;用户点击按钮后弹出提示框&#xff0c;但希望再次点击按钮不再触发提示框。针对这种需求&#xff0c;可以封装一个自定义Hooks来实现只允许点击一次的功能。 import {useCallbac…

Mysql,用户名重复,无法调用问题

问题描述&#xff1a; 我电脑的数据库用户名是&#xff0c;root。 因为经常需要帮别人封装程序&#xff0c;所以需要在我本机跑通别人的程序。有的程序里面也涉及到数据库&#xff0c;用户名也是&#xff0c;root&#xff0c;但是密码与我本机的不同。 之前我会修改我用户名…

MySQL —— 表的设计

表的设计 在设计表之前&#xff0c;我们需要从需求中获得实体&#xff08;实体就是一张张表&#xff09;&#xff0c;实体的属性就是表中的字段&#xff08;列&#xff09;&#xff0c;然后确定实体与实体之间的关系&#xff0c;最后使用 SQL 语句去创建具体的表 在设计表的时…

Unity Console 窗口输出对齐

起因&#xff1a;做了个工具在console窗口罗列一些信息&#xff0c;基本结构是 [ 文件名 &#xff1a;行号 ]&#xff0c;因为文件&#xff0c;行号长度不一&#xff0c;想要做到如下效果。 初步尝试&#xff0c;用以下方法&#xff1a; string format "{0,-10} …

python自动化笔记:配置文件.ini及yml文件

目录 一、.ini配置文件1.1、ini编写格式1.2、读取.ini配置文件的数据1.3、编辑&#xff1a;写入和删除&#xff08;了解即可&#xff09; 二、yaml文件2.1、yaml编写语法规则2.2、yaml三种数据结构2.3、yaml文件的读取和写入 一、.ini配置文件 后缀名.ini 用于存储项目全局配置…

[独家原创] CPO-RBF多特征分类预测 优化宽度+中心值+连接权值 (多输入单输出)Matlab代码

[独家原创] CPO-RBF多特征分类预测 优化宽度中心值连接权值 &#xff08;多输入单输出&#xff09;Matlab代码 目录 [独家原创] CPO-RBF多特征分类预测 优化宽度中心值连接权值 &#xff08;多输入单输出&#xff09;Matlab代码效果一览基本介绍程序设计参考资料 效果一览 基本…

java学习day016

API 1.Number 数字格式化 : # 任意数字&#xff0c;0-9任意单个数字 , 千分位 . 小数点 0 补位 //四位小数 DecimalFormat df new DecimalFormat("###,###.####"); System.out.println(df.format(1234567.312));//1,234,567.312 //四位小数,不够补0 df new Deci…

前缀和处理数组区间之和问题

1.什么是区间和问题 “区间和问题”通常指的是涉及计算或处理数组或数列某个子区间&#xff08;即一段连续元素&#xff09;的总和的类型问题。这类问题可能有多种变体和不同的复杂度&#xff0c;但基本思想都是在给定的区间内快速计算总和或处理与区间和相关的操作。 2.例题…

常见的框架漏洞

ThinkPHP 首先我们打开一个环境 然后进行远程命令执行代码 然后进行远程代码执行 ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]-1 在网页中输出phpinfo getshell ?sindex/think\app/invokefunction&function…

c语言基础知识

ASCII码 字符A~Z的ASCII码值从65~90 • 字符a~z的ASCII码值从97~122 • 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32 • 数字字符0~9的ASCII码值从48~57 • 换⾏ \n 的ASCII值是&#xff1a;10 • 在这些字符中ASCII码值从0~31这32个字符是不可打印字符&#xff0c;⽆法打印在…

sql实战cmseasy

环境搭建 这里我们用phpstady搭建 版本是cmseasy5.5 未授权访问 这里ip的方法获取客户端的ip 这里的意思是当你的server ip等于 客户端ip并且get传参 get(ishtml)1的情况下他会直接return 他就不会检查后面是不是admin&#xff0c;而他这个IP是从X_FORWARDED_FOR获取&…

Spring Boot 3.x Rest API统一异常处理最佳实践

上一篇&#xff1a;Spring Boot 3.x Rest API最佳实践之统一响应结构 在Spring MVC应用中&#xff0c;要对web表示层所抛出的异常进行捕获处理有多种方式&#xff0c;具体的可参考著名国外Spring技术实战网站baeldung上的相关话题。Spring Boot对Spring MVC应用中抛出的异常以…

RNN循环网络层

文章目录 1、简介2、RNN 网络原理3、PyTorch RNN 层的使用3.1、RNN送入单个数据3.2、RNN层送入批量数据 4、RNN三个维度4.1、解释4.2、输入数据的组织4.3、示例4.4、为什么需要这种格式&#xff1f;4.5、小结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&a…

苹果手机数据被抹除还能恢复吗?这两个方法强烈推荐

苹果手机数据被抹除还能恢复吗&#xff1f;我们在使用苹果手机时&#xff0c;有时由于误操作、系统故障或升级失败等原因&#xff0c;导致手机照片、备忘录、视频、联系人等数据被意外抹除。 面对这类情况&#xff0c;我们应该怎么办&#xff1f;下面牛小编给大家的分享2个方法…