温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++文件的数据写入和文件的数据读取怎么实现

发布时间:2022-06-16 13:51:00 来源:亿速云 阅读:159 作者:iii 栏目:开发技术

这篇文章主要介绍了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++文件的数据写入和文件的数据读取怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI