《每天一分钟学习C语言·四》文本读写操作及二进制读写

news2024/11/23 19:35:14

fopen(参数1,参数2),第一个参数是要打开的文件名,文件名字符串,第二个参数用于制定文件打开模式的一个字符串。
注:如果要打开某个盘的文本如F盘test文件夹下的test.txt文本,则fopen(“F:\test\test.txt”,”r”);
程序成功打开一个文件,fopen返回一个文件指针,FILE *fp=fopen(参数1,参数2) ,打开失败返回空,程序将退出
fclose(fp)关闭指针fp指定的文件,成功关闭返回0,否则返回EOF,结尾加上判定

if(fclose(fp)!=0)
      printf("关闭失败");

“r”:打开文本文件,读取
“w”:打开文本文件,写入,先将文件长度截取0,文件要不存在会先自动创建
“a”:打开文本文件,写入,向已有的文件尾部追加内容,文件要是不存在会先自动创建
“r+”:打开文本文件,可读可写
“w+”:打开文本文件,可读可写,先将文件长度截取0,文件要不存在会先自动创建
“a+”:打开文本文件,可读可写,向已有文件尾部追加内容,如果文件不存在先创建
“rb”,”wb”,”ab”,”ab+”,”a+b”,”wb+””w+b”,”ab+”,”a+b”以二进制模式而非文本模式打开文件
一个以二进制读写文本形式写的程序

案例:

#include<stdio.h>

void main()
{
	FILE *f_picture,*f_rar,*f_swift;
	char pictureName[30],rarName[30],swift[60];
	printf("请输入文件名:(如:F:\\picture\\1.jpg)  ");
	scanf("%s",pictureName);
	printf("请输入另一个文件名:(如:F:\\2.RAR)  ");
	scanf("%s",rarName);
	printf("请输入您要合成的文件名:(如:F:\\3.jpg)");
	scanf("%s",swift);

	//判断图片和压缩文档以及swift转换器以二进制方式是否读写成功
	if(!(f_picture = fopen(pictureName,"rb")))  
	{
		printf("Can not read %s successfully!\n",pictureName);
		return;
	}
	if(!(f_rar = fopen(rarName,"rb")))
	{
		printf("Can not read %s successfully!\n",rarName);
		return;
	}
	if(!(f_swift = fopen(swift,"wb")))
	{
		printf("Can not read %s successfully!\n",swift);
		return;
	}
	
	//二进制读写只能以feof函数判断是否在文本结尾结束,非二进制文本读写可以用字符接收的值与EOF比较判断
	while(!(feof(f_picture))) //如果读到文件结尾返回非0,否则返回0
	{
		char ch;
		ch = fgetc(f_picture);
		fputc(ch, f_swift);
	}
	fclose(f_picture);
	while(!(feof(f_rar)))
	{
		char ch;
		ch = fgetc(f_rar);
		fputc(ch,f_swift);
	}
	fclose(f_rar);
	fclose(f_swift);
}

fseek(指向被搜索文件的FILE指针,偏移量(long类型值),模式),一切正常函数返回0,否则返回-1
SEEK_SET 文件开始
SEEK_CUR 当前位置
SEEK_END 文件结尾
fseek(fp,0L,SEEK_SET); //找到文件开始处
fseek(fp,10L,SEEK_SET); //找到文件的第10个字节
fseek(fp,2L,SEEK_CUR); //文件当前位置向前移动两个字节
fseek(fp,0L,SEEK_END); //到达文件结尾处
fseek(fp,-10L,SEEK_SET); //从文件结尾处退回10个字节
ftell()函数为long类型 long len=ftell(fp); //把从文件开始到文件指针处的字节数赋给len
字符输入输出函数fgetc和fputc
fputc(ch,fp); //ch为定义的一个字符,fp为把ch这个字符写入到fp所指向的文件中去,若写入操作成功函数返回写入字符的ascii码,否则返回EOF

案例:

#include<stdio.h>

void main()
{
	char ch,ch2;
	FILE *fp = fopen("test.txt","w+");  
	
	if(!fp)
		printf("打开失败!\n");
	else
		printf("打开成功\n");
	ch = getchar();
	while(ch!='\n')
	{
		putc(ch,fp);
		ch = getchar();
	}
	fclose(fp);
	
}

char ch = fgetc(fp); 从打开的文件fp中读取一个字符并赋给ch
注:读取的文件必须是以读或读写的方式打开的。

案例:

#include<stdio.h>

void main()
{
	char ch;
	FILE *fp = fopen("test.txt","r+");
	
	if(!fp)
		printf("打开失败!\n");
	else
		printf("打开成功\n");
	ch = fgetc(fp);
	while(ch!=EOF) //读到为本最后为返回EOF
	{
		putchar(ch);
		ch = fgetc(fp);  //fgetc函数每次读取一个字符指针会自动指向下一个字符地址
	}
	fclose(fp);
}

注:EOF不是可输出字符,因此不能再屏幕上显示,当读入的字符为-1时,表示读入的已不是正常的字符而是文件结束符。

字符串输入输出函数fputs和fgets
fgets(str,n,fp); //从fp指向的文件中读取n-1个字符送入字符数组str,因为最后要加’\0’,fp必须是读或者读写的方式打开文件指针,正常读取函数返回str首地址,读取失败返回null

案例:

#include<stdio.h>

void main()
{
	char buffer[20];
	FILE *fp;
	if(!(fp=fopen("F:\test.txt","r")))  //F盘下的一个test.txt文本
	{
		printf("读取失败!\n");
		return;
	}
	fgets(buffer,20,fp);
	printf("%s\n",buffer);
	fclose(fp);
}

fputs(str,fp); //把str中的字符串写入到fp指向的文件中,直到遇到末尾的空字符。fp必须是以写,读写的方式写入,写入成功返回非负值,否则返回EOF。注:fputs(“\r\n”,fp); //用来在文本中换行

案例:

#include<stdio.h>

void main()
{
	FILE *fp;
	char buffer[20];
	char ch;
	gets(buffer);

	if(!(fp=fopen("F:\test.txt","w+")))
	{
		printf("写入失败!\n");
		return;
	}
	fputs(buffer,fp);
	rewind(fp);  //重新定义文件内部指针到文件的开头,方便在后面获取文件每个字符时从头开始获取
	ch = fgetc(fp);
	while(ch != EOF)  //读到文本最后返回EOF
	{
		putchar(ch);
		ch = fgetc(fp);
	}
	
	fclose(fp);
}

feof函数用来判断是否到达文本结尾,如果没有到结尾返回0否则返回非0(二进制读写文本专用)

ch = getchar() //从标准输入中获得一个字符
ch = getc(fp); //从fp指定的文件中获得一个字符,读到文件结尾返回EOF
Putchar(ch); //从标准输出中输出一个字符
putc(ch, stdout); //从标准输出中输出一个字符
Putc(ch, fp); //把字符写入fp指向的文件

注意:在fopen里写路径需要\,如果通过scanf键盘输入路径只要\

fp = fopen(); //fopen返回指向文件的指针,返回失败返回NULL
fclose() //关闭成功返回0,否则返回EOF

fscanf(fp, “%s %d”, name, i); //从fp指向的文件读取%s %d给name和i
fscanf(stdin, “%s %d”, name, i); //从标准输入中输入name和i
fprintf(fp, “%s %d”, name, i); //%s %d这个字符串写入fp指向的文件
fprintf(stdout, “%s %d”, name, i); //从标准输出中输出字符串%s %d

二进制读写函数fread和fwrite
char buffer[256]; double earnings[10];
fwrite(buffer,256,1,fp); //将数组中的数据写入文件,数据分成1块,每块256字节大小
fwrite(earnings,sizeof(double),10,fp); //将数组中的数据写入文件,数据分成10块,每块都是double大小。(先将数组首地址的double类型大小数据写入fp,指针自动后移将earnings下一个地址double类型大小数据写入fp,…)
fwrite函数返回成功写入的项目数,正常情况与第三个参数相等,如果写入错误返回值会小于第三个参数

double earnings[10];
fread(earnings,sizeof(double),10,fp); //从fp指向的文件读取数据到earnings数组中,读取10块,每块是一个double类型的大小。(第一个double类型大小的数据读入earnings首地址,第二个double大小数据会自动读入earnings下一个地址,…)
fread函数返回成功读取得项目数,正常情况与第三个参数相等,如果读取错误返回值会小于第三个参数

fprintf(fp,”%d”,35); //把35一字符串的形式写入fp
fscanf(fp,”%s”,arr); //从fp内容以字符串的形式读入arr字符数组

rewind(fp)把文本指针置于文件开始处,为读取做好准备,很重要的一个函数

在这里插入图片描述

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

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

相关文章

【Spring实战】创建第一个项目

文章目录 使用 Spring Initializr 创建第一个项目1. 打开官网2. 填写信息3. 生成工程4. 解压工程5. 导入 IDEA6. 编写 Hello world7. 启动项目8. 访问验证9. 详细代码最后 Spring 是一个强大且广泛使用的 Java 开发框架&#xff0c;提供了全面的基础设施和工具&#xff0c;用于…

springboot使用Validated实现参数校验

做为后端开发人员&#xff0c;一定有前端传的数据是可能会出错的警惕性&#xff0c;否则程序就可能会出错&#xff0c;比如常遇到的空指针异常&#xff0c;所以为了程序运行的健壮性&#xff0c;我们必须对每一个参数进行合法校验&#xff0c;就能避免很多不必要的错误&#xf…

刷题记录第五十一天-去除重复字母

题目要求的是字典序最小的结果。只需要理解一点就是按大小顺序排列的字符串的字典序就是最小的&#xff0c;如“abcd”这种。 解题思路如下&#xff1a; 首先明确要使用栈结构&#xff0c;并且是从栈底到栈顶递增&#xff0c;要尽可能保证递增&#xff0c;这样就能保证字典序最…

【Java系列】多线程案例学习——单例模式

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录…

第七节TypeScript 循环

1、简述 有的时候&#xff0c;我们可能需要多次执行同一块代码。一般情况下&#xff0c;语句是按顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 循环语句允许我们多次执行一个语句或语句组。 循环语句流程图&#xff…

Mybatis-Plus——02配置SQL日志,CRUD增(新注解)

配置SQL日志&#xff0c;CRUD增 一、配置SQL日志二、CRUD——增insert2.1、主建生成策略2.2、主建设置自增插入————————如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶&#xffe3;)&#xff0c;谢谢~~ 一、配置SQL日志 mybatis-plus…

网络编程 DAY6 作业

1.使用数据库创建一个工人信息库&#xff0c;包含工号&#xff08;主键&#xff09;、姓名、年龄、薪资 2.添加三条工人信息&#xff08;可以完整信息&#xff0c;也可以非完整信息&#xff09; 3.修改某一个人的薪资&#xff08;确定的一个&#xff09; 4.展示出工资在10000到…

Linux目录和文件管理

一.Linux目录结构 Linux操作系统在定位文件或目录位置时&#xff0c;使用斜杠“ / ”进行分割&#xff08;区别于Windows操作系统中的反斜杠“ \ ”&#xff09;。整个树形目录结构中&#xff0c;使用独立的一个" / "表示根目录&#xff0c;根目录是Linux操作系统文…

传输层协议分析--第4关:UDP 包分析

任务描述 本关任务&#xff1a;能够掌握简单的 UDP 包分析。 相关知识 为了更好掌握本章内容&#xff0c;你需要了解的有&#xff1a; UDP 报文的简介&#xff1b;UDP 报文格式&#xff1b;Wireshark 软件中的 UDP 抓包分析。 UDP 简介 UDP&#xff08;User Datagram Pro…

【终极教程】cocos2dx-js 分批次混淆压缩js文件

说明: 1> 由于我们当前游戏框架的结构是平台形式的就是一个大厅里面有若干个子游戏,所以在发布的时候得区分子游戏和大厅了解了一下 project.json 里面有一个 jsList 可以把所有放进去的js文件压缩混淆成一个大的文件但是我们游戏的子游戏非常多 这样子弄显然不合适&#x…

如何设计树形结构

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 前置知识&#xff1a;前…

代码随想录算法训练营Day6 | 344.反转字符串、541.反转字符串||、替换数字、151.反转字符串中的单词、右旋字符串

LeetCode 344 反转字符串 本题思路&#xff1a;反转字符串比较简单&#xff0c;定义两个指针&#xff0c;一个 i 0, 一个 j s.length-1。然后定义一个临时变量 tmp&#xff0c;进行交换 s[i] 和 s[j]。 class Solution {public void reverseString(char[] s) {int i 0;int …

工程项目管理系统源码:Java版工程项目管理系统平台助力工程企业迈向数字化管理的巅峰

随着企业规模的不断扩大和业务的快速发展&#xff0c;传统的工程项目管理方式已经无法满足现代企业的需求。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;企业需要借助先进的数字化技术进行转型。本文将介绍一款采用Spring CloudSpring BootMybat…

创新铸就卓越 HashData再度荣获 IT168技术卓越奖

12月20日&#xff0c;由国内专业数据库及架构技术社区 ITPUB、 IT 垂直门户IT168 联合主办的“2023 技术卓越奖”评选结果正式揭晓&#xff0c; 酷克数据基于云原生架构打造的HashData云数仓&#xff0c;凭借创新的技术架构、强大的性能表现、行业领先的落地规模&#xff0c;连…

在GitHub找开源项目

在 GitHub 的搜索框里&#xff1a; 使用搜索关键词可以在 GitHub 上快速的找你需要的开源项目&#xff1a; 限制搜索范围 通过 in 关键词 (大小写不敏感) 限制搜索范围&#xff1a; 公式搜索范围in:name xxx项目名包含xxxin:description xxx项目描述包含xxxin:readme xxx项目…

记录 | gdb调试的基本命令

r (run) 运行程序 b (breakpoint) 打断点&#xff0c;比如 b func(打到函数) b 5(打到第5行)(当前文件) b main.cpp:5(main.cpp的第5行) b MyClass::func() (打到类的成员函数func()、在类内可以 p this 打印、p *this、p this->name) tb (temporary breakpoint) 临时断…

算法基础之欧拉函数

欧拉函数 核心思想&#xff1a;欧拉函数: 证明 &#xff1a;容斥原理 #include<iostream>#include<algorithm>using namespace std;const int N 110;int main(){int n;cin>>n;while(n--){int a;cin>>a;int res a;for(int i 2;i < a/i; i){if(a %…

使用TikTok云手机轻松拓展全球市场

TikTok作为一款风靡全球的短视频应用&#xff0c;全球影响力不断扩大。越来越多的商家开始借助TikTok分享作品、在海外市场上获取商业机会。要想更好地借助TikTok扩大海外市场&#xff0c;使用TikTok云手机是一个好选择。本文将介绍TikTok云手机的几大作用&#xff0c;以助您更…

解决ESP8266无法退出透传问题以及获取网络时间以及天气方法

网上很多配置ESP8266的教程&#xff0c;但是遇到无法退出透传模式的情况却没有找得到答案&#xff0c;不知道是大家都没遇到还是怎么样&#xff0c;以下是我的解决方法&#xff1a;实测有效 先发送“”&#xff08;三个加号&#xff09;&#xff08;如果是在串口调试助手调试&…

保存Google Colab数据文件或目录到Google Drive云盘

一、背景 在Google Colab上使用T4 GPU完成微调训练的模型&#xff0c;保存了模型和训练状态的文件存放在Google Colab /content目录内&#xff0c;需要备份。考虑到下载到本地需要大量的流量&#xff0c;且下次继续训练还会上传&#xff0c;最后确定直接保存到Google Drive&am…