Folgender Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
bool fgmenu::ConstStrings::AddFile(const wchar_t* FileName)
{
std::wifstream* Stream = new std::wifstream(FileName);
//Stream konnte nicht geöffnet werden
if (Stream->fail())
{
//fehler
}
//Länge des Streams bestimmen
unsigned long FileLength = 0;
Stream->seekg(0, std::ios_base::end); //std::ios_base::beg
/*while(!Stream->eof())
{
Stream->seekg(sizeof(wchar_t), std::ios_base::cur);
++FileLength;
}*/
FileLength = Stream->tellg();
//Stream zum Anfang setzen
Stream->seekg(0, std::ios_base::beg);
//.....
}
|
Es funktioniert alles super, allerdings nur, wenn keine Zeilenumbrüche in der Datei vorhanden sind. Ist das aber der Fall, ist FileLength um 1 länger für jedes \n in der Datei, obwohl das ja egtl nur 1 Zeichen ist.
Wenn ich die Länge mit der while-Schleife bestimmen will, ist stream->eof() niemals true, egal wie weit er über das Ende hinaus geht, also es ist ne Endlosschleife. Das ist ziemlich ärgerlich, da ich genau wissen muss wie lang die Datei ist, um sie letzten Endes exakt einzulesen.. So wies jetzt läuft liest er nämlich für jeden Zeilenumbruch ein Chaoszeichen mehr ein. Entwicklungsumgebung ist VC++ 8.