Tohle by si určitě zasloužilo třídu. Pokud se o tom chceš dozvědět více, tak hledej pojmy serialization a deserialization.
Neco v tomhle smyslu. Netestovano.
bool WriteString(std::ofstream& out, const std::string& str)
{ //ulozi delku
std::string::size_type len = str.length();
out.write(reinterpret_cast<const char*>(&len),sizeof(std::string::size_type));
if(out.bad()) return false;
// zapise samotna data
out.write(reinterpret_cast<const char*>(str.c_str()), sizeof(char)*len);
if(out.bad()) return false;
return true;
}
bool ReadString(std::ifstream& in, std::string& str) // dodelat kontroly na eof, atd..
{ std::string::size_type len = 0;
in.read(reinterpret_cast<char*>(&len), sizeof(std::string::size_type));
if(in.bad()) return false;
str.clear(); // vymaze puvodni obsah
str.reserve(len); // alokuje dostatecne mnozstvi
in.read(&str[0], len);// tohle si muzu dovolit jen protoze vim, ze string je SEKVENCE -tedy kontejner, ktery ma prvke linearne za sebou
if(in.bad()) return false;
return true;
}
Pokud to chceš udělat univerzálnější i pro wstring, tak pak doporučuju udělat šablonu.