当前位置: 首页 > news >正文

C语言文件操作总结

目录

字符方式读入文件

数据块方式读写文件

文件定位与随机读写

文件中数据的修改


字符方式读入文件

1.向文件中写入(输入字符)

        用 fputc 函数或 puts 函数可以把一个字符写到磁盘文件中去。

int fputc(int ch,FILE * fp)

        ch 是要输出的字符,他可以是一个字符常量,也可以是一个字符变量;fp是文件指针变量,已经指向了一个由fopen函数打开的文件。

        功能:fputc(ch,fp)函数将字符输入到fp所指向的流式文件中去。如果输出成功,返回值就是输入的字符,失败则返回EOF。

从键盘输入遗传字符,以回车符\n结束,然后输入到磁盘文件中去

#include<stdio.h>
#include<stdlib.h>
int main()	
{//从键盘输入遗传字符,以回车符\n结束,然后输入到磁盘文件中去FILE * fp;char ch;if((fp=fopen("output1.txt","w"))==NULL){printf("无法创建文件!");exit(0); }while((ch=getchar())!='\n'){fputc(ch,fp);}fclose(fp);return 0;
}

2.从文件中读出一个字符

        用 fgetc 函数或者 getc 函数可以从磁盘中读出一个字符。

int fgetc(FILE * fp)

        从磁盘文键逐个读入字符,并在终端输出

#include<stdio.h>
#include<stdlib.h>
int main()
{//从磁盘文键逐个读入字符,并在终端输出FILE * fp;char ch;if((fp=fopen("output1.txt","r"))==NULL){printf("无法打开文件!\n");exit(0);	} while((ch=fgetc(fp))!=EOF){putchar(ch);}fclose(fp);return 0;
}

3.向文件中写入一个字符串

        用 fputs 函数可以把一个字符串输入到指定的流式文件中,其原型为

int fputs(char * fp,FILE * stream)

        其中,string为字符串,stream为文件指针。

 把指针string所指向的字符串输出到文件指针stream所指向的文件中,但字符串结束符‘\0’不输出

 从键盘输入若干行字符,把他们输出到磁盘文件中保存起来。

#include<stdio.h>
#include<stdlib.h>
int main()
{//从键盘输入若干行字符,把他们输出到磁盘文件中保存起来。FILE * fp;char string[81];if((fp=fopen("data.txt","w"))==NULL){printf("未找到此文件!");exit(0);	} while(gets(string)!=NULL)//ctrl+Z结束 {fputs(string,fp);fputc('\n',fp);//在每个字符串后加一个换行符 }fclose(fp);return 0;
}

数据块方式读写文件

使用数据块的方式对二进制问价进行读写操作,涉及的函数有两个:fread() 和 fwrite() 。

建立学生档案文件,每个记录包括学生的姓名,性别,年龄和入学总分 

#include<stdio.h>
#include<stdlib.h>
struct student
{char name[10];char sex;int age;float score;
};
int main()
{FILE * fp;struct student stud;char str[80],ch='y';if((fp=fopen("stud2.rec","wb"))==NULL)//二进制只写方式打开 {printf("无法打开文件!\n");exit(0);}while(ch=='y'||ch=='Y'){printf("输入姓名:");gets(stud.name);printf("输入性别:");gets(str);stud.sex=str[0];printf("输入年龄:");gets(str);stud.age=atoi(str);//年龄:将字符串转换为整型 printf("输入分数:");gets(str);stud.score=atof(str);//分数:将字符串转换为浮点型fwrite(&stud,sizeof(stud),1,fp);//写入数据到文件do{printf("继续输入:(y/n)?  ");gets(str);ch=str[0];} while(!(ch=='y'||ch=='n'||ch=='Y'||ch=='N'));}fclose(fp);return 0;
}

从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾

#include<stdio.h>
#include<stdlib.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
int main()
{//从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾struct student stud;FILE * fp;if((fp=fopen("stud2.rec","rb"))==NULL)	{printf("无法打开文件stud2.rec!\n");exit(0); }while(fread(&stud,sizeof(stud),1,fp)==1){printf("\n姓名:%s",stud.name);printf("\n性别:%c",stud.sex);printf("\n年龄:%d",stud.age);printf("\n分数:%.2f",stud.score);} printf("\n");fclose(fp);return 0;
}

文件定位与随机读写

文件的定位:利用fesk()和ftell()函数编写程序测量一个文件的长度 

#include<stdio.h>
#include<stdlib.h> 
//文件的定位
//利用fesk()和ftell()函数编写程序测量一个文件的长度 
long filesize(FILE * fp)
{long curpos,length;//当前文件读写位置指针相当于文件开头的位移量 curpos=ftell(fp);//保存文件的当前读写位置指针 fseek(fp,0L,SEEK_END);//文件读写位置指针置于文件尾端length=ftell(fp);//求文件长度fseek(fp,curpos,SEEK_SET);//恢复文件的原读写位置的指针return length; 
}
long filesize(FILE * stream);
int main()
{FILE * stream;char filename[10];printf("\n输入文件名:");scanf("%s",filename);if((stream=fopen(filename,"rb"))==NULL){printf("无法打开文件:%s\n",filename);exit(0);}printf("%s的文件大小是%ld(byte)\n",filename,filesize(stream));fclose(stream);return 0;
}

随机读写: 

由之前建立的学生入学档案的磁盘文件stud.rec中,假设学生按照分数升序排列。
现要求设计一个程序,输入一个整型值给n,输出分数最高的n个学生记录,即排在尾部的n个学生记录 

#include<stdio.h>
#include<stdlib.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
//由之前建立的学生入学档案的磁盘文件stud.rec中,假设学生按照分数升序排列。
//现要求设计一个程序,输入一个整型值给n,输出分数最高的n个学生记录,即排在尾部的n个学生记录 
int main()
{FILE * fp;struct student stud;int n;if((fp=fopen("stud.rec","rb"))==NULL){printf("无法打开文件");exit(0);	} printf("\n请输入一个整数:");scanf("%d",&n);fseek(fp,-n*sizeof(stud),SEEK_END); //定位到倒数第n个学生记录while(fread(&stud,sizeof(stud),1,fp)==1){printf("\n姓名:%s",stud.name);printf("\n性别:%c",stud.sex);printf("\n年龄:%d",stud.age);printf("\n分数:%.2f",stud.score);	} return 0;
}

文件中数据的修改

将之前的成绩表中的女生成绩加五分

#include<stdio.h>
#include<stdlib.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
int main()
{//从磁盘文件按记录读取数据,并显示读入的内容,直到文件尾struct student stud;FILE * fp;if((fp=fopen("stud.rec","rb"))==NULL)	{printf("无法打开文件stud2.rec!\n");exit(0); }while(fread(&stud,sizeof(stud),1,fp)==1){printf("\n姓名:%s",stud.name);printf("\n性别:%c",stud.sex);printf("\n年龄:%d",stud.age);printf("\n分数:%.2f",stud.score);} printf("\n");fclose(fp);return 0;
}

输入一个学生的姓名,编写程序将stud.rec中该学生的记录删除 

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
//输入一个学生的姓名,编写程序将stud.rec中该学生的记录删除 
int main()
{char name[10];FILE * fp_old,* fp_new;struct student stud;if((fp_old=fopen("stud.rec","rb"))==0)//读方式打开原数据文件 {printf("\n不能打开文件");exit(0); }if((fp_new=fopen("stud3.rec","wb"))==0)//写方式创建新数据文件 {printf("\n不能创建文件");exit(0); } printf("请输入要删除的学生姓名:");gets(name);while(fread(&stud,sizeof(stud),1,fp_old)==1){//在原文件中读取一个学生记录在stud中if(strcmp(stud.name,name)!=0){fwrite(&stud,sizeof(stud),1,fp_new);	} } fclose(fp_old);fclose(fp_new);remove("stud.rec");//删除原文件rename("stud3.rec","stud.rec"); //将新文件重命名 return 0;
}

向文件中插入数据

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{char name[10];char sex;//'M',或'F' int age;float score;
};
int main()
{FILE * fp;struct student x,t={"Alex",'f',20,566};if((fp=fopen("stud.rec","a+b"))==0){printf("\n\t无法打开文件!\n");exit(0);}fread(&x,sizeof(struct student),1,fp);//从文件中读一条学生记录fseek(fp,0L,SEEK_END); fwrite(&t,sizeof(struct student),1,fp);//将t中的数据追加到文件尾rewind(fp);while(fread(&x,sizeof(struct student),1,fp)==1){printf("\n%15s%4c%8d%8.2f",x.name,x.sex,x.age,x.score);	} fclose(fp);return 0;
}

相关文章:

C语言文件操作总结

目录 字符方式读入文件 数据块方式读写文件 文件定位与随机读写 文件中数据的修改 字符方式读入文件 1.向文件中写入&#xff08;输入字符&#xff09; 用 fputc 函数或 puts 函数可以把一个字符写到磁盘文件中去。 int fputc(int ch,FILE * fp) ch 是要输出的字符&#…...

原生js之dom如何进行事件监听(事件捕获/冒泡)

那么好,这次主要讲解的就是dom是如何进行事件监听和事件取消监听的,我们知道vue中主要用watch来进行监听. js监听与取消监听 那么原生js主要用到的就是addListenEvent事件来进行监听,可以监听文档dom对象也可以监听浏览器bom对象,监听事件的语法结构如下 Dom/Bom监听 eleme…...

使用SimPowerSystems并网光伏阵列研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

BUUCTF-WEB-[ACTF2020 新生赛]Includel

打开靶机 点击tips 利用Burp抓包&#xff0c;未见异常 但发现了响应头是 PHP/7.3.13 想到了"php://input"伪协议POST发送PHP代码 构建Payload&#xff1a;?filephp://filter/readconvert.base64-encode/resourceflag.php 这里需要注意的是使用php://filter伪协议…...

算法通关村十四关:白银挑战-堆能高效解决的经典问题

白银挑战-堆能高效解决的经典问题 1.在数组中找第K大的元素 LeetCode215 https://leetcode.cn/problems/kth-largest-element-in-an-array/ 思路分析 主要解决方法有3个&#xff0c;选择法&#xff0c;堆查找法和快速排序法 方法1&#xff1a;选择法 先遍历一遍找到最大的…...

跨站请求伪造(CSRF)攻击与防御原理

跨站请求伪造&#xff08;CSRF&#xff09; 1.1 CSRF原理 1.1.1 基本概念 跨站请求伪造&#xff08;Cross Site Request Forgery&#xff0c;CSRF&#xff09;是一种攻击&#xff0c;它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击&a…...

从0到1实现播放控制器

这系列文章主要讲诉如何从0到1使用QT实现带时间显示、滚动字幕等的自定义配置视频播放控制器。平时我们乘坐地铁经常看到各条线的播放控制器都大同小异。其实都是通过QT等界面开发软件来实现的。 在具体开发之前&#xff0c;需要明确我们需要做什么&#xff1f; 1. 开发一个可…...

【Vue-Element-Admin】导出el-table全部数据

背景 因为el-table实现了分页查询&#xff0c;所以想要实现el-table需要重新编写一个查询全部数据的方法 查询全部数据 listQuery: export default{return{listQuery:{//page:1,//limit:20,//如果想兼容按条件导出&#xff0c;可以定义查询条件age:undefined,sex:undefined…...

MFC 更改控件的大小和位置

获取当前主窗体的位置rect CRect dlgNow;GetWindowRect(&dlgNow);获取某一个控件当前的位置 CRect rect;CButton* pBtn (CButton*)GetDlgItem(IDC_BUTTONXXX);//获取按钮控件pBtn->GetWindowRect(rect);CWnd* pWnd(CWnd*)GetDlgItem(IDC_EDITXXX);//其它控件&#xff0…...

【向量数据库】相似向量检索Faiss数据库的安装及余弦相似度计算(C++)

目录 简介安装方法安装OpenBLAS安装lapack编译Faiss 代码示例余弦相似度计算输出ID号而非索引的改进版 简介 Faiss 是一个强大的向量相似度搜索库&#xff0c;具有以下优点&#xff1a; 高效的搜索性能&#xff1a;Faiss 在处理大规模向量数据时表现出色。它利用了高度优化的索…...

教育培训小程序的设计与功能解析

随着互联网的发展&#xff0c;线上教育逐渐成为一种趋势&#xff0c;越来越多的人开始选择在线学习。而搭建一个适合自己的线上教育小程序&#xff0c;可以为教育机构或个人提供更好的教学和学习体验。在本文中&#xff0c;我们将介绍如何通过一个第三方制作平台来搭建在线教育…...

【ES】illegal_argument_exception“,“reason“:“Result window is too large

查询ES数据返回错误&#xff1a; {"root_cause":[{"type":"illegal_argument_exception","reason":"Result window is too large, from size must be less than or equal to: [10000] but was [999999]. See the scroll api for…...

SpringBoot实现登录拦截

如果我们不进行登录拦截的话&#xff0c;即使我们跳过登录页面直接去访问任意一个页面也能访问成功&#xff0c;那么登录功能就没有意义&#xff0c;同时也会存在安全问题&#xff0c;因为有些操作是要用户登录后才能执行的&#xff0c;如果用户没有登录&#xff0c;该接口就获…...

浅谈泛在电力物联网、能源互联网与虚拟电厂

导读&#xff1a;从能源互联网推进受阻&#xff0c;到泛在电力物联网名噪一时&#xff0c;到虚拟电厂再次走向火爆&#xff0c;能源领域亟需更进一步的数智化发展。如今&#xff0c;随着新型电力系统建设推进&#xff0c;虚拟电厂有望迎来快速发展。除了国网和南网公司下属的电…...

深度学习框架安装与配置指南:PyTorch和TensorFlow详细教程

如何安装和配置深度学习框架PyTorch和TensorFlow 为什么选择PyTorch和TensorFlow&#xff1f;PyTorchTensorFlow安装PyTorch 步骤1&#xff1a;安装Python步骤2&#xff1a;使用pip安装PyTorch 安装TensorFlow 步骤1&#xff1a;安装Python步骤2&#xff1a;使用pip安装TensorF…...

vue中属性执行顺序

vue中属性的执行顺序 在Vue 2中&#xff0c;组件的生命周期和数据绑定的执行顺序如下&#xff1a; data&#xff1a;首先&#xff0c;组件会调用 data 函数&#xff0c;该函数返回一个对象&#xff0c;该对象的属性和方法会被分配给组件的 $data。init&#xff1a;接下来&…...

【代码随想录】Day 50 动态规划11 (买卖股票Ⅲ、Ⅳ)

买卖股票Ⅲ https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/ 无语了。。。 写的很好就是怎么都过不了。。。 还是就用代码随想录的写法吧。。。 class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();vector&…...

PHP反序列化漏洞

一、序列化&#xff0c;反序列化 序列化&#xff1a;将php对象压缩并按照一定格式转换成字符串过程反序列化&#xff1a;从字符串转换回php对象的过程目的&#xff1a;为了方便php对象的传输和存储 seriallize() 传入参数为php对象&#xff0c;序列化成字符串 unseriali…...

容器编排学习(一)k8s集群管理

一 Kubernetes 1 概述 就在Docker容器技术被炒得热火朝天之时&#xff0c;大家发现&#xff0c;如果想要将Docker应用于具体的业务实现&#xff0c;是存在困难的一一编排、管理和调度等各个方面&#xff0c;都不容易。于是&#xff0c;人们迫切需要一套管理系统&#xff0…...

js去除字符串空格的几种方式

方法1&#xff1a;(最常用)全部去除掉空格 var str abc d e f g ; function trim(str) { var reg /[\t\r\f\n\s]*/g; if (typeof str string) { var trimStr str.replace(reg,); } console.lo…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...