Вы можете переопределить operator>>
и operator<<
для чтения / записи в поток.
Пример Entry struct
с некоторыми значениями:
struct Entry2
{
string original;
string currency;
Entry2() {}
Entry2(string& in);
Entry2(string& original, string& currency)
: original(original), currency(currency)
{}
};
istream& operator>>(istream& is, Entry2& en);
ostream& operator<<(ostream& os, const Entry2& en);
Реализация:
using namespace std;
istream& operator>>(istream& is, Entry2& en)
{
is >> en.original;
is >> en.currency;
return is;
}
ostream& operator<<(ostream& os, const Entry2& en)
{
os << en.original << " " << en.currency;
return os;
}
Затем вы открываете файловый поток, и для каждого объекта вы вызываете:
ifstream in(filename.c_str());
Entry2 e;
in >> e;
//if you want to use read:
//in.read(reinterpret_cast<const char*>(&e),sizeof(e));
in.close();
Или выводите:
Entry2 e;
// set values in e
ofstream out(filename.c_str());
out << e;
out.close();
Или, если вы хотите использовать потокread
и write
, тогда вы просто заменяете соответствующий код в реализации operator
.
Когда переменные являются частными внутри вашей структуры / класса, вам нужно объявить operator
s как методы-друзья.
Вы реализуете любой формат / разделители, которые вам нравятся.Когда ваша строка включает пробелы, используйте getline (), которая принимает строку и поток вместо >>
, потому что operator>>
использует пробелы в качестве разделителей по умолчанию.Зависит от ваших разделителей.