C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)[通俗易懂]

C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)[通俗易懂]本文主要总结用C++的fstream、ifstream、ofstream方法读写文件,然后用seekg()、seekp()函数定位输入、输出文件指针位置,用tellg()、tellp()获取当前文件指针位置。一、核心类和函数功能讲解fstream:文件输入输出类。表示文件级输入输出流(字节流);ifstream:文件输入类。表示从文件内容输入,也就是读文件;ofstream:文件输…

大家好,又见面了,我是你们的朋友全栈君。

本文主要总结用C++的fstream、ifstream、ofstream方法读写文件,然后用seekg()、seekp()函数定位输入、输出文件指针位置,用tellg()、tellp()获取当前文件指针位置。

一、核心类和函数功能讲解

fstream:文件输入输出类。表示文件级输入输出流(字节流);

ifstream:文件输入类。表示从文件内容输入,也就是读文件;

ofstream:文件输出类。表示文件输出流,即文件写。

seekg():输入文件指针跳转函数。表示将输入文件指针跳转到指定字节位置‘

seekp():输出文件指针跳转函数。表示将输出文件指针跳转到指定位置。

下面将通过总结一个读写*.txt文件来演示上述输入输出类和文件跳转函数用法。

二、简单示例

2.1源代码

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdio>

struct planet
{
	char name[20];
	double population;
	double g;
}p1;

int main()
{
	using namespace std;

	/*读文件*/
	int ct = 0;		//计数
	fstream finout;	//文件读和写字节流
	finout.open("test1.txt", ios_base::in | ios_base::out | ios_base::binary);	//二进制读和写
	if (!finout.is_open())
	{
		cout << "open file E:\\1TJQ\\test1.txt fail!";
		system("pause");
		return false;
	}
	finout.seekg(0);	//输入流文件跳转指针,回到文件起始位置
	cout << "show red file\n";
	while (finout.read((char *) &p1,sizeof p1))
	{
		cout << ct++ << " " << p1.name << " " << p1.population << " " << p1.g << endl;
	}
	if (finout.eof())
		finout.clear();	//清空结尾eof标志,可以再次打开该文件



	/*写文件*/
	streampos place = 3 * sizeof p1;	//转换到streampos类型
	finout.seekg(place);	//随机访问
	if (finout.fail())
	{
		cerr << "error on attempted seek\n";
		system("pause");
		exit(EXIT_FAILURE);
	}

	finout.read((char *)&p1, sizeof p1);
	cout << "\n\nshow writed file\n";
	cout << ct++ << " " << p1.name << " " << p1.population << " " << p1.g << endl;
	if (finout.eof())
		finout.clear();	//清楚eof标志

	memcpy(p1.name, "Name1", sizeof("Name1"));	 
	p1.population = 66.0;
	p1.g == 55.0;
	finout.seekp(place);
	finout.write((char *)&p1, sizeof p1) << flush;
	if (finout.fail())
	{
		cerr << "error attempted write\n";
		system("pause");
		exit(EXIT_FAILURE);
	}



	/*显示修改后的文件内容*/
	ct = 0;
	finout.seekg(0);
	cout << "\n\nshow revised file\n";
	while (finout.read((char *) &p1,sizeof p1))
	{		
		cout << ct++ << " " << p1.name << " " << p1.population << " " << p1.g << endl;
	}

	system("pause");
	return 0;
}

2.2输出结果如下图所示

C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)[通俗易懂]

C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)[通俗易懂]

 

参考内容:

《C++ Primer Plus》(第6版)中文版  773-787页(参考:文件模式)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139917.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba」[通俗易懂]

    Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba」[通俗易懂]很早以前,在刚开始搞SpringCloud基础教程的时候,写过这样一篇文章:《微服务架构的基础框架选择:SpringCloud还是Dubbo?》,可能不少读者也都看过。之后也就一直有关于这两个框架怎么选的问题出来,其实文中我有明确的提过,SpringCloud与Dubbo的比较本身是不公平的,主要前者是一套较为完整的架构方案,而Dubbo只是服务治理与RPC实现方案。由于Dubbo在…

    2022年5月27日
    42
  • 〖Python零基础入门篇④〗- Pycharm插件安装与常用的插件

    〖Python零基础入门篇④〗- Pycharm插件安装与常用的插件插件是安装在特定程序上软件组件,以增强程序某项功能。一个好的IDE都会提供插件平台,允许第三方在遵循插件平台集成条款的前提下,使用插件平台对外提供的能力,扩展出更广泛更丰富的功能。PyCharm提供了大量商业与免费插件,内容涉及了方方面面,开发者根据工作的实际需要,可以在Marketplace搜索对应的插件,合理的使用正确插件,将极大的提高开发效率,并且保证代码质量。

    2022年6月24日
    35
  • Oracle创建用户和授权

    Oracle创建用户和授权Oracle创建用户和授权一、安装后修改管理员密码并登陆运行cmd命令行录入sqlplus/nolog无用户名登录conn/assysdba连接到数据本地数据alterusersystemidentifiedbypassword;修改System的密码为password登陆system创建用户和授权其中的路径一定…

    2022年5月19日
    84
  • DeepFakes深度造假,AI换脸的技术原理是什么?

    DeepFakes深度造假,AI换脸的技术原理是什么?DeepFakes的出现还意味着我们可以在视频中进行大规模的“换脸”。我们大多数人都曾经把自己的照片上传到网络上,因此,我们大多数人的脸都能够轻易地被替换到一些视频中,成为视频的“主角”,凭空捏造一个人根本没有干过的事。不得不说,这是件非常可怕的事情。

    2022年5月25日
    48
  • navicat for mysql 15 激活码【在线注册码/序列号/破解码】[通俗易懂]

    navicat for mysql 15 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    74
  • 1g的树莓派4b能做什么_树莓派4B开发板简介

    1g的树莓派4b能做什么_树莓派4B开发板简介树莓派简介RaspberryPi(中文名为“树莓派”,简写为RPi,(或者RasPi/RPI)是为学生计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux,随着Windows10IoT的发布,我们也将可以用上运行Windows的树莓派,别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全。树莓派由注册于英国的慈善组织“Raspber…

    2022年5月20日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号