類的成員是這些

保存資料的函式
void Company::Save(std::list<Employee> &list)
{
ofstream outfile("F:\\131\\VS\\Worker\\Worker\\Worker\\Employee.txt", ios::trunc);
if (outfile.is_open())
{
outfile << setw(4) << "編號" << setw(9) << "姓名" << setw(9) << "年齡" << setw(9) << "性別" << setw(9) << "郵編" << setw(9) << "部門" << setw(10) << "工資" << endl;
for (auto it = list.begin(); it != list.end(); it++)
{
outfile << *it << endl;
}
}
outfile.close();
}
uj5u.com熱心網友回復:
按你寫的方式讀出來uj5u.com熱心網友回復:
for (auto it = list.begin(); it != list.end(); it++){
outfile << *it << endl;
}
這里的意思就是你類重裝了 << 運算子,那么也應該重裝 >> 運算子,一樣的順序讀進來就可以了
uj5u.com熱心網友回復:
怎么寫進去的就怎么讀出來,反操作而異uj5u.com熱心網友回復:
for (auto it = list.begin(); it != list.end(); it++){
outfile << *it << endl;
}
保持了什么資訊, 代碼不全
uj5u.com熱心網友回復:
類結構可以考慮二進制保存與讀取:儲存使用write函式,讀取使用read函式
儲存:
ofstream fout("file",ios_base::out|ios_base::binary);
for (auto it = list.begin(); it != list.end(); it++){
fout.write(char*(*it),sizeof(*it));
}
讀取:
ifstream fout("file",ios_base::out|ios_base::binary);
Employee* ptr = new Employee;
fout.read(char*(*ptr),sizeof(*ptr));
uj5u.com熱心網友回復:
樓主這種做法不大好,輸出兩個變數到檔案時,中間需要有分隔符的!!參考下MFC CArchive
uj5u.com熱心網友回復:
讀取檔案》決議檔案到變數uj5u.com熱心網友回復:
簡單點的做法是將類成員修改為一個結構體,全部使用定長資料。寫入檔案與讀出,使用完整的結構體物件。
uj5u.com熱心網友回復:
我也有這個問題,這個問題的核心是,沒辦法把資料像普通變數那樣直接讀寫,普通變數直接給出地址就讀進來了,但是物件是封裝的,成員變數是沒辦法直接進行讀入的,除非把成員變數定義為public,但是這樣不就破壞封裝性了嗎?uj5u.com熱心網友回復:
但是這樣不就破壞封裝性了嗎?uj5u.com熱心網友回復:
寫的時候直接把資料就寫到檔案里了,但是讀的時候,由于物件里資料是封裝的,沒辦法直接訪問地址,所以是讀不進去的呀,只能寫不能讀uj5u.com熱心網友回復:
本身就存在問題,看一下序列化吧,別用這種方式了,
uj5u.com熱心網友回復:
字串不太好控制,你可以采用二進制寫入普通型別:
void Serialize(std::ostream & os, const T & val)
{
os.write((const char *)&val,sizeof(T));
}
對于字符型別:
void Serialize(std::ostream & os, const T & val)
{
unsigned int size = val.size();
os.write((const char *)&size, sizeof(size));
os.write((const char *)val.data(),size * sizeof(typename T::value_type));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56489.html
標籤:C++ 語言
上一篇:在寫Linux環境下的生產者/消費者問題的時候遇到了一些困難,大家能幫忙看看嗎
下一篇:求助大佬
