服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++文件的数据写入和文件的数据读取的方法实现

C++文件的数据写入和文件的数据读取的方法实现

2022-12-25 16:13想吃读研的苦 C/C++

本文主要介绍了C++文件的数据写入和文件的数据读取的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一:没有数据,准备数据,写入文件

1.main.cpp

#include<iostream>
using namespace std;
#include<fstream>
#include<string>
#include<list>
#include"CData.h"
#include"CStaff.h"

int main()
{
	CData::userInit();//数据初始化
	return 0;
}

2.CStaff.h

#ifndef CSTAFF_H
#define CSTAFF_H
#define ADMIN 1
#define MANAGER 2
#define WAITER 3
#include<string>
#include<iostream>
using namespace std;

class Staff
{
public:
	Staff();
	Staff(int id,string name,string pwd,int prole);
	~Staff();
	int getId();
	string getName();
	string getPwd();
	int getRole();
private:
	int ID;
	string name;
	string pwd;
	int role;
};

#endif

3.CStaff.cpp

#include"CStaff.h"
#include<iostream>
using namespace std;

Staff::Staff()
{
}

Staff::Staff(int id,string name,string pwd,int prole)
{
	this->ID = id;
	this->name = name;
	this->pwd = pwd;
	this->role = prole;
}

int Staff::getId()
{
	return this->ID;
}

string Staff::getName()
{
	return this->name;
}

string Staff::getPwd()
{
	return this->pwd;
}

int Staff::getRole()
{
	return this->role;
}

Staff::~Staff()
{
}

4.CData.h

#ifndef CDATA_H
#define CDATA_H
#include<list>
#include"CStaff.h"

//专门用来做数据准备  文件存储在磁盘中 程序运行在内存中
//缓存区 链表 向量    适合什么样的容器
class CData
{
public:
	//静态:不通过对象 属于类 类名::静态成员/静态函数
	static list<Staff> staffList;
	static void userInit();      //用户数据初始化
};

#endif

5.CData.cpp

#include"CData.h"
#include<fstream>
#include<iostream>
using namespace std;

list<Staff> CData::staffList; //静态成员的初始化

//实现类的静态函数
void CData::userInit()
{
	/*
	1.从文件中读取数据 存入list
	2.如果没有数据 先预定义一些数据写入文件 存储list3个
	3.如果有数据 读取出来存入list
	*/
	fstream fs;//文件流对象  in从文件中读出 out写入文件 app追加
	fs.open("user.txt",fstream::in | fstream::out |fstream::app);
	//目标读文件 文件指示器需要定在开头
	//如果没有数据 定位到文件尾部 获取文件大小
	fs.seekg(0, ios::end);
	//计算文件中的字节数
	int count = fs.tellg();
	//创建一个迭代器
	list<Staff>::iterator it;
	if(count<=0)
	{
		cout<<"没有数据,准备数据,写入文件"<<endl;
		CData::staffList.push_back(Staff(1001,"admin","123",ADMIN));
		CData::staffList.push_back(Staff(1002,"lily","123",MANAGER));
		for(it = CData::staffList.begin();it!=CData::staffList.end();it++)
		{
			//fs写入 每个元素是对象.运算符获取
			//每个数据一行 用空格隔开
			fs<<(*it).getId()<<" "<<(*it).getName()<<" "<<(*it).getPwd()<<" "<<(*it).getRole()<<endl;
		}
	}
}

结果:

C++文件的数据写入和文件的数据读取的方法实现

 

二:读文件操作

CData.cpp

#include"CData.h"
#include<fstream>
#include<iostream>
using namespace std;

list<Staff> CData::staffList; //静态成员的初始化

//实现类的静态函数
void CData::userInit()
{
	/*
	1.从文件中读取数据 存入list
	2.如果没有数据 先预定义一些数据写入文件 存储list3个
	3.如果有数据 读取出来存入list
	*/
	fstream fs;//文件流对象  in从文件中读出 out写入文件 app追加
	fs.open("user.txt",fstream::in | fstream::out |fstream::app);
	//目标读文件 文件指示器需要定在开头
	//如果没有数据 定位到文件尾部  获取文件大小
	fs.seekg(0, ios::end);
	//计算文件中的字节数
	int count = fs.tellg();
	//创建一个迭代器
	list<Staff>::iterator it;
	if(count<=0)
	{
		cout<<"没有数据,准备数据,写入文件"<<endl;
		CData::staffList.push_back(Staff(1001,"admin","123",ADMIN));
		CData::staffList.push_back(Staff(1002,"lily","123",MANAGER));
		for(it = CData::staffList.begin();it!=CData::staffList.end();it++)
		{
			fs<<(*it).getId()<<" "<<(*it).getName()<<" "<<(*it).getPwd()<<" "<<(*it).getRole()<<endl;		
		}
	}
	else
	{
		//目标读文件 文件指示器定位到开头
		fs.seekg(0,ios::beg);
		char buf[256] = {0};
		int id = 0,role = 0;
		char pwd[10]={0};
		char name[10]={0};
		while(fs.peek()!=EOF)//EOF是读到末尾
		{
			//没有读到最后 每一行都读取
			fs.getline(buf,256);
			//sscanf读到数据 使用空格进行拆分
			sscanf(buf,"%d %s %s %d",&id,name,pwd,&role);
			//拆分出来的数据 放入链表中
			CData::staffList.push_back(Staff(id,name,pwd,role));		
		}
		for(it = CData::staffList.begin();it!=CData::staffList.end();it++)//验证是否读对
		{
			cout<<(*it).getId()<<" "<<(*it).getName()<<" "<<(*it).getPwd()<<" "<<(*it).getRole()<<endl;		
		}	
	}	
}

C++文件的数据写入和文件的数据读取的方法实现

结果:读到的是文件中的正确信息

到此这篇关于C++文件的数据写入和文件的数据读取的方法实现的文章就介绍到这了,更多相关C++文件数据写入和读取内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_56051805/article/details/124395709

延伸 · 阅读

精彩推荐
  • C/C++C语言 MD5的源码实例详解

    C语言 MD5的源码实例详解

    这篇文章主要介绍了C语言 MD5的源码实例详解的相关资料,需要的朋友可以参考下...

    C语言教程网5502021-04-28
  • C/C++C语言数据结构之二叉链表创建二叉树

    C语言数据结构之二叉链表创建二叉树

    这篇文章主要介绍了C语言数据结构之 二叉链表创建二叉树,下文我们为了更方便的使用二叉树结构体,可以使用 typedef 对结构体进行命名,具体内容需要...

    正弦定理7392022-09-20
  • C/C++C语言 使用qsort函数来进行快速排序

    C语言 使用qsort函数来进行快速排序

    排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序是目前公认的一种比较好的排序算法。因为他速度很快,所以系...

    诚挚的乔治4792022-09-16
  • C/C++C语言深入讲解内存操作问题

    C语言深入讲解内存操作问题

    程序运行的目的是为了得到特定的结果,计算机本质上是用于计算的,既然是用于计算,就需要参与计算的数据,那这些数据就存储在内存中,计算之前参...

    清风自在 流水潺潺12042022-11-10
  • C/C++C语言堆栈帧的介绍与创建

    C语言堆栈帧的介绍与创建

    这篇文章主要给大家介绍了关于C语言堆栈帧的相关资料,堆栈帧 (stack frame)( 或活动记录 (activation Tecord)) 是一块堆栈保留区域,用于存放被传递的实际参数、...

    从善若水4722021-12-09
  • C/C++C++将模板实现放入头文件原理解析

    C++将模板实现放入头文件原理解析

    这篇文章主要为大家介绍了C++将模板实现放入头文件原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    同勉共进11412022-12-16
  • C/C++Qt自定义控件实现进度仪表盘

    Qt自定义控件实现进度仪表盘

    这篇文章主要介绍了Qt自定义控件实现进度仪表盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    parkchorong7032021-08-09
  • C/C++C语言应用领域分析

    C语言应用领域分析

    在本篇文章里小编给各位分享的是关于C语言应用领域分析内容,有兴趣的朋友们可以学习下。...

    51CTO9102021-08-26