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)
上一篇 2022年5月28日 下午11:46
下一篇 2022年5月29日 上午6:00


相关推荐

  • Java多线程死锁问题

    Java多线程死锁问题死锁这么重要,请仔细阅读死锁问题死锁定义死锁举例如何排查死锁死锁发生的条件怎么解决死锁问题?线程通讯机制(wait/notify/notifyAll)LockSupport死锁问题死锁定义多线程编程中,因为抢占资源造成了线程无限等待的情况,此情况称为死锁。死锁举例注意:线程和锁的关系是:一个线程可以拥有多把锁,一个锁只能被一个线程拥有。当两个线程分别拥有一把各自的锁之后,又尝试去获取对方的锁,这样就会导致死锁情况的发生,具体先看下面代码:/***线程死锁问题*/public

    2022年7月13日
    15
  • 07_Azkaban工作流调度器简介及其安装

    07_Azkaban工作流调度器简介及其安装

    2022年4月3日
    43
  • Fastai安装_fastai

    Fastai安装_fastai本文为译文,主要介绍安装问题。Fastaigithub原文地址:https://github.com/fastai/fastai/blob/master/README.md#is-my-system-supported注意事项:fastaiv1目前只支持Linux,并且需要PyTorchv1和Python3.6或更高版本。Windows还处于试验阶段:应该可以很好地工作,但还没有全面的测…

    2025年10月8日
    7
  • 解决Ubuntu中Edge浏览器smartUp手势插件导致鼠标右键不灵敏的问题

    解决Ubuntu中Edge浏览器smartUp手势插件导致鼠标右键不灵敏的问题解决Ubuntu中Edge浏览器smartUp手势插件导致鼠标右键不灵敏的问题Edge浏览器正式版、Beta、Dev版本都存在smartUp手势插件导致鼠标右键不灵敏的问题解决方法Edge浏览器正式版、Beta、Dev版本都存在smartUp手势插件导致鼠标右键不灵敏的问题解决方法打开smartUp手势设置,或者直接在浏览器地址栏输入下面的地址extension://elponhbfjjjihgeijofonnflefhcbckp/html/options.html通用选项->Linux

    2022年7月21日
    14
  • 压测工具Jmeter入门使用

    压测工具Jmeter入门使用一 创建一个基础的 Web 测试 1 测试内容模拟五个用户请求 2 次指定的 http 接口 并且重复 2 次 也就是总共请求有 5 2 2 20 次要构建本次内容需要用到 Jmeter 的元素 线程组 HTTP 请求 HTTP 请求默认值和图形结果 2 具体操作 2 1 创建测试计划单击左上角的新建计划按钮即可 同时可以设置测试计划的名称 注释 测试计划是一个完整测试元素的顶层容器 2 2 创建线程组线程组可以用来设置要模拟的用户数量 用户应该多久发送一次请求 以及他们应该发送

    2026年3月20日
    2
  • K8S报错异常锦集(持续更新)

    K8S报错异常锦集(持续更新)

    2021年5月30日
    133

发表回复

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

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