natürlich kann man stringvariablen einlesen
macht man aber ein wenig anderes ...
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
bool write_string(const std::string& string, const std::string& filename)
{
std::ofstream file_stream(filename.c_str(), std::ios::out | std::ios::binary);
if (!file_stream)
return false;
size_t string_len = string.length();
file_stream.write(reinterpret_cast<char*>(&string_len), sizeof(size_t)); // Länge des Strings speichern
file_stream.write(string.c_str(), static_cast<std::streamsize>(string_len)); // const wegcasten und String in Datei schreiben
file_stream.close();
return true;
}
|
so in etwa müsste das gehen ...
und lesen würde man dann in etwa so:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
bool read_string(const std::string& filename, std::string& string)
{
std::ifstream file_stream(filename.c_str(), std::ios::in | std::ios::binary);
if (!file_stream)
return false;
size_t string_len = 0; // mit 0 initialisieren
file_stream.read(reinterpret_cast<char*>(&string_len), sizeof(size_t)); // Stringlänge auslesen
char* temp_array = new char[string_len + 1]; // array in dieser Größe anlegen
file_stream.read(temp_array, static_cast<std::streamsize>(string_len)); // String in temp_array lesen
file_stream.close();
temp_array[string_len] = 0; // string.c_str() ist meine ich nicht nullterminiert. Auf jedenfall mal terminieren.
string = temp_array;
delete [] temp_array; // WICHTIG! Immer freigeben.
return true;
}
|