C++文件的數(shù)據(jù)寫入和文件的數(shù)據(jù)讀取的方法實(shí)現(xiàn)
一:沒有數(shù)據(jù),準(zhǔn)備數(shù)據(jù),寫入文件
1.main.cpp
#include<iostream>
using namespace std;
#include<fstream>
#include<string>
#include<list>
#include"CData.h"
#include"CStaff.h"
int main()
{
CData::userInit();//數(shù)據(jù)初始化
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"
//專門用來做數(shù)據(jù)準(zhǔn)備 文件存儲(chǔ)在磁盤中 程序運(yùn)行在內(nèi)存中
//緩存區(qū) 鏈表 向量 適合什么樣的容器
class CData
{
public:
//靜態(tài):不通過對(duì)象 屬于類 類名::靜態(tài)成員/靜態(tài)函數(shù)
static list<Staff> staffList;
static void userInit(); //用戶數(shù)據(jù)初始化
};
#endif5.CData.cpp
#include"CData.h"
#include<fstream>
#include<iostream>
using namespace std;
list<Staff> CData::staffList; //靜態(tài)成員的初始化
//實(shí)現(xiàn)類的靜態(tài)函數(shù)
void CData::userInit()
{
/*
1.從文件中讀取數(shù)據(jù) 存入list
2.如果沒有數(shù)據(jù) 先預(yù)定義一些數(shù)據(jù)寫入文件 存儲(chǔ)list3個(gè)
3.如果有數(shù)據(jù) 讀取出來存入list
*/
fstream fs;//文件流對(duì)象 in從文件中讀出 out寫入文件 app追加
fs.open("user.txt",fstream::in | fstream::out |fstream::app);
//目標(biāo)讀文件 文件指示器需要定在開頭
//如果沒有數(shù)據(jù) 定位到文件尾部 獲取文件大小
fs.seekg(0, ios::end);
//計(jì)算文件中的字節(jié)數(shù)
int count = fs.tellg();
//創(chuàng)建一個(gè)迭代器
list<Staff>::iterator it;
if(count<=0)
{
cout<<"沒有數(shù)據(jù),準(zhǔn)備數(shù)據(jù),寫入文件"<<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寫入 每個(gè)元素是對(duì)象.運(yùn)算符獲取
//每個(gè)數(shù)據(jù)一行 用空格隔開
fs<<(*it).getId()<<" "<<(*it).getName()<<" "<<(*it).getPwd()<<" "<<(*it).getRole()<<endl;
}
}
}結(jié)果:

二:讀文件操作
CData.cpp
#include"CData.h"
#include<fstream>
#include<iostream>
using namespace std;
list<Staff> CData::staffList; //靜態(tài)成員的初始化
//實(shí)現(xiàn)類的靜態(tài)函數(shù)
void CData::userInit()
{
/*
1.從文件中讀取數(shù)據(jù) 存入list
2.如果沒有數(shù)據(jù) 先預(yù)定義一些數(shù)據(jù)寫入文件 存儲(chǔ)list3個(gè)
3.如果有數(shù)據(jù) 讀取出來存入list
*/
fstream fs;//文件流對(duì)象 in從文件中讀出 out寫入文件 app追加
fs.open("user.txt",fstream::in | fstream::out |fstream::app);
//目標(biāo)讀文件 文件指示器需要定在開頭
//如果沒有數(shù)據(jù) 定位到文件尾部 獲取文件大小
fs.seekg(0, ios::end);
//計(jì)算文件中的字節(jié)數(shù)
int count = fs.tellg();
//創(chuàng)建一個(gè)迭代器
list<Staff>::iterator it;
if(count<=0)
{
cout<<"沒有數(shù)據(jù),準(zhǔn)備數(shù)據(jù),寫入文件"<<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
{
//目標(biāo)讀文件 文件指示器定位到開頭
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讀到數(shù)據(jù) 使用空格進(jìn)行拆分
sscanf(buf,"%d %s %s %d",&id,name,pwd,&role);
//拆分出來的數(shù)據(jù) 放入鏈表中
CData::staffList.push_back(Staff(id,name,pwd,role));
}
for(it = CData::staffList.begin();it!=CData::staffList.end();it++)//驗(yàn)證是否讀對(duì)
{
cout<<(*it).getId()<<" "<<(*it).getName()<<" "<<(*it).getPwd()<<" "<<(*it).getRole()<<endl;
}
}
}
結(jié)果:讀到的是文件中的正確信息
到此這篇關(guān)于C++文件的數(shù)據(jù)寫入和文件的數(shù)據(jù)讀取的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C++文件數(shù)據(jù)寫入和讀取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)24點(diǎn)問題詳解
24點(diǎn)問題就是在屏幕上輸入1?10范圍內(nèi)的4個(gè)整數(shù)(可以有重復(fù)),對(duì)它們進(jìn)行加、減、乘、除四則運(yùn)算后(可以任意的加括號(hào)限定計(jì)算的優(yōu)先級(jí)),尋找計(jì)算結(jié)果等于24的表達(dá)式。本文將通過C語(yǔ)言實(shí)現(xiàn)24點(diǎn)問題的求解,需要的可以參考一下2021-12-12
C++11 shared_ptr 與 make_shared源碼剖析詳解
這篇文章主要介紹了C++11 shared_ptr 與 make_shared的源碼剖析,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
c語(yǔ)言中如何修改文件中間的幾個(gè)字節(jié)
工作中碰到一個(gè)問題,如何只修改文件中間的幾個(gè)字節(jié),而其他的內(nèi)容不變。這個(gè)問題看似簡(jiǎn)單,但是很多人估計(jì)都不知道怎么做。我開始seek到文件的特定的位置,然后寫文件,但是使用的文件打開模式不對(duì),文件不是被清空,就是被截?cái)?,達(dá)不到效果2020-10-10
哈希表實(shí)驗(yàn)C語(yǔ)言版實(shí)現(xiàn)
以下是對(duì)哈希表實(shí)驗(yàn)用C語(yǔ)言實(shí)現(xiàn)的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07
C語(yǔ)言使用sizeof和strlen計(jì)算數(shù)組和指針大小
sizeof()一般是用來求取?變量?或者?類型?所占內(nèi)存空間的大小,strlen()是一個(gè)庫(kù)函數(shù)是專門用來計(jì)算?字符串?長(zhǎng)度的,下面我們就來看看C語(yǔ)言如何使用sizeof和strlen計(jì)算數(shù)組和指針大小吧2023-11-11
基于matlab對(duì)比度和結(jié)構(gòu)提取的多模態(tài)解剖圖像融合實(shí)現(xiàn)
這篇文章主要介紹了多模態(tài)醫(yī)學(xué)圖像配準(zhǔn)與融合的概念、方法及意義,最后簡(jiǎn)單介紹了小波變換分析方法。感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-11-11
opencv3/C++視頻中疊加透明圖片的實(shí)現(xiàn)
今天小編就為大家分享一篇opencv3/C++視頻中疊加透明圖片的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12

