文件的使用

news2025/4/28 16:54:15

文章目录

  • 1.概念
    • 1.1定义:
    • 1.2分类
    • 1.3文件名
  • 2.文件的使用
    • 2.1文件指针
    • 2.2开闭函数
    • 2.3顺序读写
      • 2.3.1何为读写
      • 2.3.2读写函数
        • 1.字符输出fputc(输出到文件 写到文件中)
        • 2.字符输入fgetc(输入到程序 读到程序中)
        • 3.文本行函数
        • 4.格式化函数
          • 4.1...scanf--printf
          • 4.2...fscanf--fprintf
          • 4.3...sscanf--sprintf
        • 5.二进制函数

1.概念

1.1定义:

文件:电脑文件,计算机文件。存储在长期储存设备(磁盘、光盘、磁带)或临时存储设备(计算机内存)中的一段数据流,归属于计算机文件系统管理下。

存储于长期存储设备的文件:
1.长期存储
2.程序或系统运行产生的临时数据,于程序或系统退出后删除。

1.2分类

程序文件:
源程序文件(.c)
目标文件(.obj)
可执行程序(.exe)。

数据文件:
程序
程序运行时读写的数据
程序运行读取数据或输出内容的文件

1.3文件名

文件存在的标识,操作系统根据文件名对其进行控制和管理。不同操作系统对文件命名规则略有不同,文件名的格式和长度因系统而异。为方便区分计算机中不同文件,给每个文件设定指定名称。

组成:
文件路径 + 文件名主干 + 文件后缀
C:\code2023\ test4_29 .txt

2.文件的使用

2.1文件指针

指向文件信息区(文件在内存中开辟的一个FILE结构体变量)的指针变量

2.2开闭函数

#include<stdlib.h>
打开:
FILE *fopen( const char *filename, const char *mode );
关闭:
int fclose( FILE *stream );

示例:
#include <stdio.h>
 int main(void) 
 {
    FILE* pf = fopen("test.dat", "w");

    FILE* pf = fopen("C:\\code2023\\test4_29.txt", "w");
    if (pf == NULL) 
    {
        perror("fopen");
        return 1;
    }
   fclose(pf);
   pf = NULL; 
   return 0;
 }


  • 程序能够打开的文件有限,文件属于一种资源。如果不释放,文件会被占用。可能会导致一些操作被缓冲在内存中,缓冲在内存中的数据不能正常写入文件中导致数据丢失。

2.3顺序读写

2.3.1何为读写

程序位于内存
数据位于硬盘上的文件

文件拿出数据:输入/读取(r)
程序存到文件:输出/写入(w)

2.3.2读写函数

1.字符输出fputc(输出到文件 写到文件中)

int fputc( int c, FILE *stream );
无符号字符输出到流
#include <stdio.h>
 int main(void) 
 {  
    写文件-->程序输出到文件
    w:无此文件创立文件
       覆盖文件原有内容
    FILE* pf = fopen("test.txt", "w");
    if (pf == NULL) 
    {
        perror("fopen");
        return 1;
    }
    fputc('a', pf);
    fputc('b', pf);
    fputc('c', pf);
 
    fputc('a', stdout);
    
    fclose(pf);
    pf = NULL;
    return 0;
}

2.字符输入fgetc(输入到程序 读到程序中)

int fgetc( FILE *stream );
从流中读取字符
成功返回ASCII值
失败返回EOF
#include <stdio.h>
int main(void) 
{
    FILE* pf = fopen("test.txt", "r");
    if (pf == NULL) 
    {
        perror("fopen");
        return 1;
    }
    int ret = fgetc(pf);
    printf("%c\n", ret);
    ret = fgetc(pf);
    printf("%c\n", ret);
    ret = fgetc(pf);
    printf("%c\n", ret);

    int ret = fgetc(stdin);
    
    fclose(pf);
    pf = NULL;
    return 0;
}

3.文本行函数

输出:
int fputs( const char *string, FILE *stream );
fputs("abcdef\n", pf);
输入:
char *fgets( char *string, int n, FILE *stream );
fgets(arr, 4, pf);

点击 fgets函数详解 对fgets函数有更深刻的认识

4.格式化函数

4.1…scanf–printf
输出:
int printf( const char *format [, argument]... );
printf("%d", a);
printf("Hello,World!\n");
输入:
int scanf( const char *format [,argument]... );
scanf("%d %d", &a, &b);
4.2…fscanf–fprintf
输出:
int fprintf( FILE *stream, const char *format [, argument ]...);
fprintf(pf, "%s %d %f", p1.name, p1.dpi, p1.sens);
输入:
int fscanf( FILE *stream, const char *format [, argument ]... );
fscanf(pf, "%s %d %f", p1.name, &(p1.dpi), &(p1.sens));
4.3…sscanf–sprintf
输出:
int sprintf( char *buffer, const char *format [, argument] ... );
输入:
int sscanf( const char *buffer, const char *format [, argument ] ... );

示例:
#include <stdio.h>
struct S 
{
	char arr[10];
	int age;
	float f;
};
int main() 
{
	struct S s = { "hello", 20, 3.14f };
	struct S tmp = { 0 };
    char buffer[100] = { 0 };
    
	sprintf(buffer, "%s %d %f", s.arr, s.age, s.f); 
	printf("%s\n", buffer);
	
    sscanf(buffer, "%s %d %f", tmp.arr, &(tmp.age), &(tmp.f));
	printf("%s %d %f\n", tmp.arr, tmp.age, tmp.f);
 
	return 0;
}

scanf 标准格式化输入 - stdin
fscanf 所有输出流格式化输出- stdin / 文件
sscanf 从字符串中读取格式化数据

printf 标准格式化输出 - stdout
fprintf 所有输出流格式化输出 - stdout /文件
sprintf 格式化数据转换成字符串

输出/写入函数
输入/读至程序

5.二进制函数

输出:
size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
fwrite(&s, sizeof(struct S), 1, pf);
输入:
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
fread(&s, sizeof(struct S), 1, pf);

点击 阿猿的《通讯录》查看通讯录,可以对上述函数又更清晰的理解

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

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

相关文章

别争了,Excel和Access都靠边,WPS也退,划时代电子表格早已出现

电子表格&#xff0c;绝不仅仅只是你看到的样子&#xff01; 无论是Excel&#xff0c;还是与它抗衡30多年&#xff0c;不分上下的金山WPS&#xff0c;都没能开创出真正划时代意义的电子表格。 揭秘前让我们先简单回顾下电子表格的前世今生&#xff0c;等不及的可直接进度条下拉…

超写实虚拟人制作教程

最近突然吹起一阵虚拟人直播风潮&#xff0c;大概就是找一个虚拟人物&#xff0c;用主播的面部动作来驱动虚拟人来完成头部和表情动作&#xff0c;但我看大部分都是下载的UE5Unreal Eigine 5&#xff08;Epic公司出品的一款强大的3D创作平台&#xff0c;很多大型3A大作都是用其…

google.common的guava依赖的partition分割产生的浅拷贝问题解决方案

google.common的guava依赖的partition分割产生的浅拷贝问题解决方案 问题背景解决方案Lyric&#xff1a; 说你不爱我 问题背景 使用google.common的guava依赖的partition分割产生的浅拷贝问题&#xff0c;如: 把userList集合分割成每个10000的小集合 List<List> partiti…

vue+gin—— GetcharZp

vuegin—— GetcharZp vuegin—— GetcharZpP1-项目介绍【03:51】P2-项目梳理【29:59】problemusercategorysubmit P3-环境搭建【05:27】P4-整合GIN、GORM【16:20】P5-整合 Swagger【10:01】P6-接口-问题列表【19:34】P7-接口-问题详情【24:06】P8-接口-用户详情【05:36】P9-接…

C++菱形继承(再剖析)

当子类对象给父类对象的时候&#xff0c;怎么找公共的虚基类&#xff08;A&#xff09; 就得通过偏移量来算虚基类的位置 ---------------------------------------------------------------------------------------------------------------------------- 我们来分析一下B…

DBi-Tech Studio Controls 1.6 for .NET Crack

Studio Controls for .NET 为 Windows 开发人员提供了 18 个 .NET 控件&#xff0c;用于 Outlook 风格的调度到管理单元报告、Windows 应用程序导航到现代 UI 设计演示以实现自然的最终用户功能。 Appointment Scheduling、Time Tabling、Day Timer ... 应…

【Unity入门】20.三维向量

【Unity入门】三维向量 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;空间向量 &#xff08;1&#xff09;什么是三维向量 为什么会有这么一篇博客呢&#xff1f;主要是三维向量在unity中…

[Redis] 数据结构zset压缩列表实现和跳表实现讲解

&#x1f61a;一个不甘平凡的普通人&#xff0c;致力于为Golang社区和算法学习做出贡献&#xff0c;期待您的关注和认可&#xff0c;陪您一起学习打卡&#xff01;&#xff01;&#xff01;&#x1f618;&#x1f618;&#x1f618; &#x1f917;专栏&#xff1a;算法学习 &am…

多级缓存建设方案

项目背景 xx系统中对容量和耗时有较高要求&#xff0c;以支付优惠立减为例&#xff0c;每个用户咨询可用立减时&#xff0c;都会过一遍全量生效活动。目前日常活动数3000&#xff0c;目标2w&#xff1b;日常秒级咨询量1w&#xff0c;大促22w。所以如何支撑日常和大促的业务非常…

Unity利用UGUI RawImage组件制作转场动画

Unity利用UGUI RawImage组件制作转场动画 最近接到了一个unity全景图的小项目&#xff0c;由于在不同的场景之间转场时直接转会太过生硬&#xff0c;因此要求有个Alpha转场的动画。于是想到两种可行的方案&#xff1a; 一、UGUI方案 用UGUI显示当前屏幕纹理&#xff0c;然后…

python处理图像的各种技术镜像、旋转、遮挡、叠加、条带化

2.6 图像镜面对称 1、将图像水平镜面转换。 2、将图像垂直镜面转换。 import random #导入模块 import numpy as np import matplotlib.pyplot as plt a plt.imread("1.jpg") # 将图像沿着水平方向重复三次。 ba.copy() da.copy() # 将图像水平镜面转换。&…

【笔记】cuda大师班1-4

一.基本概念 进程&#xff08;process&#xff09;一个正在被执行的计算机程序的实例 上下文&#xff08;context&#xff09;&#xff1a;待处理数据的集合&#xff0c;允许处理器暂停&#xff0c;保持处理的执行和恢复处理 并发&#xff1a;上下文切换&#xff0c;主要应用于…

AIGC - 生产力新工具 Copilot

文章目录 介绍能干啥IDEA 安装 介绍 https://github.com/features/copilot 能干啥 Copilot的主要功能包括: 代码补全和提示:Copilot会根据上下文,智能提示您可能需要的变量,函数,参数等。快速生成代码:Copilot可以快速生成if语句,for循环,类定义,函数定义等代码模板。代码优…

Unity之OpenXR+XR Interaction Toolkit实现 传送

前言 VR中由于走动比较容易头晕&#xff0c;所以基本上玩家移动都是靠传送&#xff0c;这样用户更加直观&#xff0c;传送过去也不会感觉头晕。 好了&#xff0c;那么我们一起来说实现一下OpenXR的传送功能。 准备 我们新建一个3D&#xff08;URL&#xff09;项目&#xff0…

git 撤销add/commit,以及更换源命令

前言&#xff1a;主要是为了自己方便记录&#xff0c;省的每次都查找一下这些命令 1、当我们只是想撤回commit&#xff0c;保留add .的时候&#xff0c;可以用下方代码 git reset --soft HEAD^ 2、当我们想撤回commit以及add .的时候&#xff0c;可以用下方代码 git reset…

Mesh形变算法

前言&#xff1a; 作者正好因为动画、模拟仿真等等的重大需求需要预先研发离散形的模型Mesh的形变算法&#xff0c;并且要验证、研究适用的范围、特别是性能等等&#xff0c;摸着石头过河别喷&#xff0c;毕竟我主要是渲染、动画、引擎的对于计算几何、三维重建不是很熟悉&…

Python小姿势 - Python使用Jupyter Notebook

Python使用Jupyter Notebook Jupyter Notebook是一个开源的Web应用程序&#xff0c;可以用来创建和共享包含 live code&#xff0c;公式&#xff0c;可视化和解释性文本的文档。 安装Jupyter Notebook 首先&#xff0c;确保你安装了正确的Python版本和包管理器&#xff08;pip&…

(6)elasticsearch的分词器

1 文档规范化&#xff08;normalization&#xff09; 是为了提高召回率。 停用词 、时态转换、大小写、同义词、语气词。 以下的doc1\doc2&#xff0c;经过normalization之后&#xff0c;在搜索的时候是可以匹配到这两个doc。 我们可以看到&#xff0c;normalization就是把一…

带你认识什么是BMS(电池管理系统)

文章目录 概述BMS的硬件拓扑BMS的电气架构BMS的功能BMS的总压采集&#xff08;主板功能&#xff09;BMS的电流采集&#xff08;主板功能&#xff09;BMS的电芯电压和温度采集&#xff08;从板功能&#xff09;BMS的SOC、SOP和SOH&#xff08;ASW计算&#xff09;BSM的绝缘检测B…

ES6新特性(1)

目录 一、字符串扩展 &#xff08;1&#xff09;字符串遍历器接口&#xff08;for...of...&#xff09; &#xff08;2&#xff09;模板字符串 二、字符串新增方法 &#xff08;1&#xff09;包含方法 &#xff08;2&#xff09;重复方法 &#xff08;3&#xff09;补全方…