C/C++读写文本文件、二进制文件[转]

C C++读写文本文件、二进制文件_c语言按行读取二进制文件 C语言读写文件均通过FILE指针执行操作,其中文本文件的读写用fprintf,fscanf,二进制文件的读写用fread,fwriteC++读写文件通过fstream、ifstream、ofstream进行操作,文本文件用> 进行读写,二进制文件用read和write进行读写。 阅读详情

参考连接:https://blog.youkuaiyun.com/nichengwuxiao/article/details/78789225

#include <stdio.h> //包含c文件读写
#include <fstream> //包含c++文件读写
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

/*
1. C语言读写文件均通过FILE指针执行操作,其中文本文件的读写用fprintf,fscanf,二进制文件的读写用fread,fwrite
2. C++读写文件通过fstream、ifstream、ofstream进行操作,文本文件用<< 和 >> 进行读写,二进制文件用read和write进行读写
*/
/************************************************************************/
/* C                                                                     */
/************************************************************************/
/*
C 文本写入
*/
int TextWrite_C(){
	int index[50];
	double x_pos[50],y_pos[50];
	//向数组填充数据
	for (int i=0;i<50;i++)
	{
		index[i] = i;
		x_pos[i] = rand()%1000 * 0.01;
		y_pos[i] = rand()%2000 * 0.01;
	}

	//写入数据
	FILE *pFileWriter = fopen("txt_out_c.txt","w");
	if (NULL == pFileWriter)
	{
		printf("写文件失败!\n");
		return -1;
	}
	for (int i = 0;i<50;i++)
	{
		fprintf(pFileWriter,"%03d\t%4.6lf\t%4.6lf\n",index[i],x_pos[i],y_pos[i]);
	}
	fclose(pFileWriter);
	return 0;
}

/*
C 文本读取
*/
int TextRead_C(){
	FILE *pFileRead = fopen("txt_out_c.txt","r");
	if (NULL == pFileRead)
	{
		printf("打开%s失败!","txt_out_c.txt");
		return -1;
	}

	vector<int> index;
	vector<double> x_pos;
	vector<double> y_pos;
	
	int mode = 1;
	printf("mode=1:按字符读取\nmode=2:按行读取\nmode=3:按数据格式读取");
	scanf("%d",&mode);
	if (1==mode)
	{
		char ch;
		while(EOF !=(ch = fgetc(pFileRead))){
			printf("%c",ch);
		}
	}else if (2 == mode)
	{
		char line[1024];
		memset(line,0,1024);
		while(!feof(pFileRead)){
			fgets(line,1024,pFileRead);
			printf("%s\n",line);
		}
	}else if (3 == mode)
	{
		int index_tmp;
		double x_tmp,y_tmp;
		while (!feof(pFileRead))
		{
			fscanf(pFileRead,"%d%lf%lf\n",&index_tmp, &x_tmp, &y_tmp);
			index.push_back(index_tmp);
			x_pos.push_back(x_tmp);
			y_pos.push_back(y_tmp);
		}
		for (int i=0;i<index.size();i++)
		{
			printf("%04d\t%4.8lf\t%4.8lf\n",index[i], x_pos[i], y_pos[i]);
		}
	}
	fclose(pFileRead);
	return 0;
}
/*
C二进制写入
*/
int BinDataWrite_C(){
	double pos[200];
	for (int i=0;i<200;i++)
	{
		pos[i]=i;
	}
	FILE *pFileWriter;
	pFileWriter = fopen("binary.dat","wb");
	if (NULL == pFileWriter)
	{
		printf("写文件出错");
		return -1;
	}
	int mode = 1;
	printf("mode=1:逐个写入\nmode=2:逐行写入");
	scanf("%d",&mode);
	if (1 == mode)
	{
		for (int i=0;i<200;i++)
		{
			for (int i=0;i<200;i++)
			{
				fwrite(&pos[i],sizeof(double),1,pFileWriter);
			}
		}
	}else if (2 == mode)
	{
		fwrite(pos,sizeof(double),200,pFileWriter);
	}
	fclose(pFileWriter);
	return 0;
}
/*
C二进制读取
*/
int BinDataRead_C(){
	FILE *pFileRead;
	pFileRead = fopen("binary.dat","rb");
	if (NULL==pFileRead)
	{
		printf("读取文件出错");
		return -1;
	}
	int mode = 1;
	printf("mode=1:知道有多少数据\nmode=2:不知道有多少数据");
	scanf("%d",&mode);
	if(1==mode){
		double pos[200];
		fread(pos,sizeof(double),200,pFileRead);
		for(int i = 0;i<200;i++){
			printf("%lf\n",pos[i]);
		}
		free(pos);
	}else if (2==mode)
	{
		//获取文件大小
		fseek(pFileRead,0,SEEK_END);
		long lSize = ftell(pFileRead);
		rewind(pFileRead);

		//开辟存储空间
		int num = lSize/sizeof(double);
		double *pos = (double*)malloc(sizeof(double)*num);
		if (NULL ==pos)
		{
			printf("开辟空间出错");
			return -1;
		}
		fread(pos,sizeof(double),num,pFileRead);
		for (int i=0;i<num;i++)
		{
			printf("%lf\n",pos[i]);
		}
		free(pos);
	}
	fclose(pFileRead);
	return 0;
}

/************************************************************************/
/* C++                                                                  */
/************************************************************************/
/*
C++文本写入
*/
int TextWrite_CPP(){
	int index[50];
	double x_pos[50],y_pos[50];
	for (int i=0;i<50;i++)
	{
		index[i]=i;
		x_pos[i]=rand()%1000 * 0.01;
		y_pos[i]=rand()%2000 * 0.01;
	}
	fstream fFileWrite("txt_out_cpp.txt",ios::out);
	if (fFileWrite.bad())
	{
		cout<<"打开文件出错"<<endl;
		return -1;
	}
	for (int i=0;i<50;i++)
	{
		fFileWrite<<setw(5)<<index[i]<<"\t"<<setw(10)<<x_pos[i]<<"\t"<<setw(10)<<y_pos[i]<<endl;
	}
	fFileWrite.close();
	return 0;
}

/*
C++ 读取
*/
int TextRead_CPP(){
	fstream fFileReader;
	fFileReader.open("txt_out_cpp.txt",ios::in);
	//文件打开方式选项:
	// ios::in    = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式)
	// ios::out    = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)
	// ios::ate    = 0x04, //文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用
	// ios::app    = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后
	// ios::trunc   = 0x10, //在读写前先将文件长度截断为0(默认)
	// ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用
	// ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用
	// ios::binary  = 0x80  //二进制格式文件
	vector<int> index;
	vector<double> x_pos;
	vector<double> y_pos;
	if (NULL == fFileReader)
	{
		cout<<"打开文件出错"<<endl;
		return -1;
	}
	cout<<"mode=1:按字符读入并输出\nmode=2:按行读取\nmode=3:按数据格式"<<endl;
	int mode = 1;
	cin>>mode;
	if (1==mode)
	{
		char ch;
		while(EOF!=(ch=fFileReader.get())){
			cout<<ch;
		}
	}else if(2 ==mode){
		char line[128];
		int numBytes;
		fFileReader.getline(line,128);
		cout<<line<<"\t"<<endl;
		fFileReader.getline(line,128);
		cout<<line<<"\t"<<endl;
		fFileReader.seekg(0,0);
		while (!fFileReader.eof())
		{
			fFileReader.getline(line,128);
			numBytes = fFileReader.gcount();
			cout<<line<<"\t"<<numBytes<<"字节"<<endl;
		}
	}else if (3==mode)
	{
		int index_tmp =0;
		double x_pos_tmp = 0,y_pos_tmp=0;
		while (!fFileReader.eof())
		{
			fFileReader>>index_tmp>>x_pos_tmp>>y_pos_tmp;
			index.push_back(index_tmp);
			x_pos.push_back(x_pos_tmp);
			y_pos.push_back(y_pos_tmp);
			cout<<index_tmp<<"\t"<<x_pos_tmp<<"\t"<<y_pos_tmp<<endl;
		}
	}
	fFileReader.close();
	return 0;
}
/*
C++二进制写入
*/
int BinDataWrite_CPP(){
	double pos[200];
	for (int i=0;i<200;i++)
	{
		pos[i]=i;
	}
	ofstream fFileWrite("binary.dat",ios::binary);
	if(!fFileWrite)
	{
		cout<<"创建文件失败"<<endl;
		return -1;
	}
	fFileWrite.write((char*)pos,200*sizeof(double));
	fFileWrite.close();
}
/*
C++ 二进制读取
*/
int BinDataRead_CPP(){
	double pos[200];
	ifstream fFileReader("binary.dat",ios::binary);
	if (!fFileReader)
	{
		cout<<"读取文件失败"<<endl;
		return -1;
	}
	fFileReader.read((char*)pos,200*sizeof(double));
	for (int i=0;i<200;i++)
	{
		cout<<pos[i]<<endl;
	}
	fFileReader.close();
	return 0;
}
文件下载,二进制流转换成文件 解决中文名乱码的问题 立即下载

相关推荐

二进制文件转换为文本文件的工具

一个很有用的工具,可以将二进制文件转换为文本文件

把二进制文件转换为文本格式(十进制)

首先要清楚文件里,储存的数据的类型,是int,long,longlong还是float,double 其次文件有无字节序(大小端)问题 这两个问题解决了 直接按照数据类型定义一个定长数据,或者数组一次性读入,或者分批读入全部文件。 需要的话,读取以后,先转换一下字节顺序 fopen,二进制读方式,打开文件,fread读取文件,fclose关闭文件 然后转换成十进制ACII格式的数据...

qq_41230365的博客 1万+

wsl + vscode 离线配置 ERROR: Faild to download https://update.code.visualstudio.com

很多情况下是没有现成的VS Code Server程序的,需要手动下载。记住上面的Commit ID,可以通过下面的链接下载 vscode-server-linux-x64.tar.gz。然后将vscode-server-linux-x64.tar.gz上传在服务器上的$HOME/.vscode-server/bin文件夹中,解压。在wsl中下载不了 vscode 的核心。运行下面两行命令,建立空的$HOME/.vscode-server/bin文件夹。重新运行 wsl与vs的链接即可。

点云算法工程师 3790

【C/C++基础】文件操作:C++文本文件,二进制文件;C语言文件操作

一、什么是文件1.程序文件2.数据文件3.文本文件:4.二进制文件:5.文件名(文件标识) 二、操作文件的三大类:三、文本文件3.1 写文件步骤:3.2文件打开方式:3.3读文件:与写文件步骤相似,但是读取方式较多四、二进制文件:打开方式要指定为 ios::binary4.1写文件步骤 用write函数4.2读文件 用read函数五、C语言关于-文件的打开和关闭5.1文件指针(文件类型指针)5.2文件的打开和关闭(一定一定注意文件后缀

Catherine_77的博客 1639

对LSTM中每个batch都初始化隐含层的理解

不知道有没有人和我有一样疑惑 在LSTM相关的代码中,为什么每个batch都会将隐藏层重新初始化, 这样不会把以前训练出来的参数丢掉吗?? 比如 代码来自GitHub 看了一些解释是h与c是状态,不是参数,每个batch中都需要初始化为0,LSTM 中的参数是W,b。 网络中训练的是参数,不是状态。 说真的。。。当时我没怎么看懂。。。 咨询了实验室的师兄后,我有了自己的理解 产生误解的主要原因是我对RNN和LSTM的结构理解不深入,我们通常看到RNN结构图基本都是这样的 ...

Chauncey_Wang的博客 5910

STC89C52RC单片机原理图详解

左侧A0和右侧B0为一 一对应的关系,左上角DIR为控制数据方向端口,如果DIR接高电平是将左侧数据A0~A8送到右侧B0~B8,如果DIR接低电平,是将右侧数据B0~B8送到左侧A0~A8,由于在电路板上LE始终与VCC连接,因此这里。74HC595是串行输入,并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于I/O口扩展。由于数码管为共阴极,给数码管下面接口输入阳码时,LED才亮,但是直接将P0~P7的高电平输入到数码管时,

m0_50562428的博客 6万+

C++文件操作 文本文件的读和写 二进制文件的读和写 代码展示

C++文件操作 文本文件的读和写的步骤 本文文件打开的四种方式及注意点 二进制文件的读和写 代码展示 总结

UUUUU22的博客 1509

MS1030超声波流量计电路实战:如何用15ps精度优化水表设计(附配置代码)

本文深入探讨了如何利用MS1030超声波流量计芯片实现15ps高精度测量,以优化水表设计。文章从系统误差分配出发,详细解析了硬件电路设计要点、SPI通信配置及核心优化技巧,如利用可编程偏置电压和8回波累加功能来提升抗干扰能力与测量稳定性,并附有实用的配置代码示例。

svm4gardener的博客 334

C++ 文件和字符串的互相转化

在我们日常的工作中经常会遇到这样的场景,需要将一个文件以二进制的形式读出来,保存到一个字符串中,或者将一个二进制文件字符串保存成一个文件: 将文件以二进制的形式读到一个字符串中,代码如下: bool File2String(string filePath, string& data) { ifstream fs(filePath.c_str(),ios::binary);

len_yue_mo_fu的博客 904

深度解析中国支付清算体系

说起国之重器,不仅仅有 东风快递、渔16、渔17、渔18,还有另外一个国之重器-CNAPS2(中国支付清算体系)。 中国国内支付行业的发达水平、繁荣程度,不客气的讲,在全世界都是数一数二的,世界上最大的银行卡组织银联在中国,世界上交易量最大的网络零售支付清算体网联在中国。可以说现在我国经济的高速发展,离不开CNAPS2。

银行信息系统应用架构详解 2510

ESP32-C3模组上跑通HTTPS分次传输文件(1)

ESP32-C3模组上跑通HTTPS分次传输文件(1)

phmatthaus的专栏 760

C/C++读写文本文件、二进制文件

C语言文本文件读写方式;C语言二进制文件读写方式;CPP文本文件读写方式;CPP二进制文件读写方式;

nichengwuxiao的博客 9万+

SAP成本核算的核心逻辑

SAP成本核算采用"计划-归集-分析"闭环管理,以CO模块为核心,集成PP、MM等模块。核算前需配置标准成本控制范围、成本中心等主数据。标准成本通过BOM和工艺路线计算(CK11N),采购和生产过程记录实际成本差异。制造费用通过成本中心归集,作业成本按实际耗用量分配。完工产品按标准成本入库,月末通过KO88结算工单差异,物料分类账(CKMLCP)还原实际成本。整个流程实现FI与CO数据同步,确保账务一致。关键事务码包括CK11N(成本估算)、MIGO(物料移动)、CO11N(报工)等。

金牌架构师 537

【C写文件】C/C++读写文本文件、二进制文件/文件读写

目录 一:目的 二:C语言文本文件读写 1. 文本文件写入 2. 文本文件读取 三:C语言二进制文件读写 1. 二进制文件写入 2.二进制文件读取 四:C++文本文件读写 1. 文本文件写入 2.文本文件读取 五:C++二进制文件读写 1. 二进制文件写入 2.二进制文件读取 六 总结 获取文件大小 方法一 方法二 一:目的 掌握C语言文本文件读写方式...

我的笔记本 8614

(10)三相三绕组变压器的建模仿真

建立了三相三绕组变压器组的Simulink仿真模型,通过实例进行了仿真计算。

weixin_45670943的博客 1143

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C/C++文件读写操作(二进制文件&文本文件)

C/C++读取文件操作包括二进制和文本文件。

Blog 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C/C++读写文本文件、二进制文件的方法

首先一定要记住fread函数只用于读二进制文件,而fscanf可以读文本也可以读二进制。 fwrite/fread将以二进制形式写入/读取文件,例如像例子中的int类型,将会以数值形式保存。若使用记事本等程序打开将会看到无法识别的内容。 fprintf/fscanf把数据内容格式化为字符串,实际写入文件的内容为该字符串每一个字符的ASCII码。若用记事本打开则显示文本内容。 假设像例子程序中的a[...

jerwey的博客 2863

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C/C++中二进制文件与文本文件的读写操作及区别

cout<<ch<<endl;使用getch获取键盘输入时,如果按enter键,得到的是’\r’,原因就在于enter键

1958

[Matlab+C/C++] 读写二进制文件

在处理某些数据的时候,可能涉及到文件的读写,如果用MATLAB存储为mat文件,那么其它程序读取这种数据就变得困难了。如果将数据存为文本文件,文件的解析过程就会变得比较长。幸运的是MATLAB可以读写自定义格式的二进制文件,基本所有程序语言(包括C/C++)在内,都是支持二进制文件的读写操作的。本文就介绍一下如何使用MATLAB和C/C++对二进制文件进行读写。

Expressing Youself Using Code 5767

文本文件与二进制文件的读写

文本文件与二进制文件的读写 【https://wenku.baidu.com/view/d7dfd688680203d8ce2f243c.html】 以什么模式打开文件根本不重要,只要关心这个文件里的数据内容本身是二进制格式还是文本格式就好了!如果内容是文本格式的,你就调用文本格式那一套函数,比如puts,gets,fscanf,fprintf,>等,如果内容是二进制格式的,你就调用二进制格式

u010385790的博客 2万+

ofstream 二进制 文本_C/C++读写文本文件、二进制文件的方法

一:目的掌握C语言文本文件读写方式;掌握C语言二进制文件读写方式;掌握CPP文本文件读写方式;掌握CPP二进制文件读写方式;二:C语言文本文件读写1. 文本文件写入//采用C模式对Txt进行写出void TxtWrite_Cmode(){//准备数据int index[50] ;double x_pos[50], y_pos[50];for(int i = 0; i < 50; i ++ )...

weixin_31422487的博客 1990

C/C++读写二进制文件

结合 fread 与 fwrite 函数读写二进制文件

bluebird_shao的专栏 6783

【C/C++进阶】——文件操作之文本文件与二进制文件指针读写

所谓文件就是:磁盘上的文件。在程序设计中,我们主要说的文件一般分为两种:1.程序文件;2.数据文件。程序文件:字面意思,就是在写程序的过程中所写出的文件。包括源程序文件(后缀为 .c),目标文件(后缀为 .obj),可执行程序文件(后缀为 .exe)等等。数据文件:文件中的内容不一定是程序,而是程序在运行时所读写的数据,例如程序运行过程中需要从中读取数据的文件,或输出内容的文件。所谓的操作文件实际上操作的就是 数据文件。

2302_78684687的博客 1645

常用的C/C++文本文件的读写函数

概述 文本文件的读写是算法研究和工程应用中常见的功能模块。C和C++的标准库中提供了多种文本文件的读写方法,我们一般都会掌握其中比较习惯使用的一种或几种方法。解决问题的方法不在多,而在精。经过在网上的资料搜索和总结,这里我对实际编程中经常用到的几类方法总结如下。对C和C++分开介绍,目的是让大家即能用C++读写文本文件,又能用C读写文本文件。不多不少,恰到好处地掌握好该掌握的读写知识。 C读写

xmh的专栏 1万+

(C++)文本文件以及二进制文件的读写操作

目录文件的读写一、文本文件——写文件二、文本文件——读文件 文件的读写 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化 C++中对文件操作需要包含头文件 fstream 文件类型分为两种: 1.文本文件 - 文件以文本的ASCll码形式存储在计算机中 2.二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们 操作文件的三大类: 1.ofstream:写操作 2.ifstream:读操作 3.fstream :读写操作 一、

Lemon_CHA的博客 1485
上一篇: 创建one-hot矩阵的两种方式
下一篇: C++实现explode
cvMat
博客等级 码龄11年 62粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值