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:\TJQ\\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页(参考:文件模式)

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 【Java安全技术探索之路系列:Java可扩展安全架构】之五:JCE(一):JCE架构介绍

    【Java安全技术探索之路系列:Java可扩展安全架构】之五:JCE(一):JCE架构介绍作者:郭嘉邮箱:allenwells@163.com博客:http://blog.csdn.net/allenwellsgithub:https://github.com/AllenWellJCE最初是作为JCA的扩展包开发的,旨在提供受美国出口控制条例管制的加密服务API和实现。JCE提供一个提供者实现和一组相关的API和包,以支持加密和解密,密钥的生成和协商以及消息验证算法,其中对加

  • c语言必备100代码(代码大全)

    一个完全入门初学者如何学代码,读代码和写代码,,我想学代码不知道方向谁能给我指明一个方向?1、学代码:前提是你的复有一个比较系统的学习.认真完成每一个课程中的案例.2、读代码:分制两步走:前期能读懂自己写的代码.2113后期能读懂他人写的代码和大致的知道底层的某些源码的含义.多去5261看开发文档(开发文档建议使用官方提供的4102英文版、不要使用中文自己害自己)3、写代码1653:前提是你要有…

  • css控制滚动条透明,CSS控制滚动条样式的解析

    我们在之前的两篇文章中,我们给大家介绍了关于CSS设置div滚动条样式、以及CSS3自定义滚动条样式的实例,都知道当内容超出容器时,容器会出现滚动条,那我们如何使用CSS控制滚动条样式的呢?今天就给大家详细介绍!例子:/*作为IT界最前端的技术达人,页面上的每一个元素的样式我们都必须较真,就是滚动条我们也不会忽略。下面我给大家分享一下如何通过CSS来控制滚动条的样式,代码如下:*//*定义滚动条…

  • vs2010密钥

    vs2010密钥vs2010密钥YCFHQ-9DWCY-DKV88-T2TMH-G7BHP转载于:https://www.cnblogs.com/andy_tigger/archive/2010/09/27/1837082.html

  • Spring+Struts+Hibernate 简介(转)

    Spring+Struts+Hibernate 简介(转)

  • executescalar mysql_ExecuteScalar[通俗易懂]

    executescalar mysql_ExecuteScalar[通俗易懂]这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

发表回复

您的电子邮箱地址不会被公开。

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