文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

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

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()
{
	
	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;
		}
	}
}

结果:

二:读文件操作

CData.cpp

#include"CData.h"
#include<fstream>
#include<iostream>
using namespace std;
 
list<Staff> CData::staffList; //静态成员的初始化
 
//实现类的静态函数
void CData::userInit()
{
	
	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++文件数据写入和读取内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯