M
morgaehn
ich wuerde es ungefaehr so loesen:
StreamHelper.h
#ifndef StreamHelperH
#define StreamHelperH
#include <iostream>
#include <system.hpp> // wegen AnsiString <- weiß nur net ob das jetz wirklich stimmmt
template <class T>
void BinaryWrite(std::ostream &out, T val)
{
out.write(reinterpret_cast<const char*>(&val), sizeof(val));
}
template <class T>
void BinaryRead(std::istream &in, T &in)
{
in.read(reinterpret_cast<char*>(&val), sizeof(val));
}
template<>
void BinaryWrite(std::ostream &out, const AnsiString &str)
{
BinaryWrite(out, str.Length());
out.write(str.c_str(), str.Length());
}
template<>
void BinaryRead(std::istream &in, AnsiString &str)
{
int t_len; // muss gleich gross sein wie sizeof(AnsiString.Length())
BinaryRead(in, t_len);
if(!t_len) return;
char *buffer = new char[t_len];
in.read(buffer, t_len);
str = AnsiString(buffer, t_len);
delete[] buffer;
}
#endif
in datei schreiben:
TStringList *List = new TStringList;
List->LoadFromFile("list.txt");
std::ofstream datei("liste2.txt", std::ios::binary);
BinaryWrite(datei, List->Count());
for(int i = 0;i < List->Count();++i)
{
WriteBinary(datei, List[i]);
}
datei.close();
aus datei lesen
TStringList my_list;
std::ifstream datei("liste2.txt", std::ios::binary);
int count;
BinaryRead(datei, count);
while(count--)
{
AnsiString temp;
BinaryRead(datei, temp);
my_list.Add(temp);
}
datei.close();
der source ist ungetestet. nur mal so aus dem kopf geschrieben
Meep Meep