Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::ifstream::eof

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.02.2007, 22:02 Uhr
xXx
Devil


Also ... folgender Code:

C++:
std::ifstream file_stream;
file_stream.open(file_name.c_str(), std::ios::in | std::ios::binary);
    
if (file_stream.is_open() == false)
    return false;
    
while (file_stream.eof() == false)
{
    unsigned short string_lenght = 0;
    file_stream.read((char*)(&string_lenght), sizeof(unsigned short)); // Länge des Strings einlesen
    char* string = new char[string_lenght + 1]; // Zum terminieren nochn Zeichen hinzu...
    file_stream.read(string, string_lenght); // String einlesen
    string[string_lenght] = 0; // Da die Strings nicht terminiert in der Datei vorliegen
    std::cout << string_lenght << ": " << string << std::endl; // Nur Temporär
    m_items.push_back(std::string(string)); // String in den Vector einfügen ...
    delete [] string; // Brauchen wir net mehr => kann weg ...
}

file_stream.close();
Soweit funzt das auch fast wie ich es haben will. Nur hab ich jetzt noch das Phänomen, das er noch am Ende einmal folgendes ausgibt:

Code:
0:
... nur warum? Wie kann ich das verhindern? Scheint mir so als würde der genau einmal zu oft durchgehen Wobei die Strings die ich sonnst einlese alle korrekt sind ...
Jemand ne Idee? Wäre dankbar für ne Antwort.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.02.2007, 22:25 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


length schreibt man übrigens TH nicht HT

Zeig mal deine Datei, ich schätze mal du liest einfach ein Zeichen zu wenig, wodurch er erst bei dem nächsten read 1. Null liefert (für dein string-length) 2. EOF erreicht.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.02.2007, 22:32 Uhr
xXx
Devil


Hmm schreiben tue ich es so:

C++:
bool add_string(const std::string& file_name)
{
    if (file_name == "")
        return false;

    std::string string = "Test";

    std::ofstream file;
    file.open(file_name.c_str(), std::ios::out | std::ios::binary | std::ios::app);
    
    if (file.is_open() == false)
        return false;

    unsigned short len = static_cast<unsigned short>(string.length());
    file.write((char*)(&len), sizeof(unsigned short));
    file.write(string.c_str(), (int)string.length());

    file.close();

    return true;
}
Sollte ja eigentlich reichen ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.02.2007, 22:39 Uhr
xXx
Devil


Hmm ich mein da ich alle Elemente die ich in der Datei finde in einen Vector packe kann ich natürlich auch immer das letzte Element löschen ... das ist ja aber nicht der Sinn ... d.h. hat jemand eine Idee was falsch sein könnte? Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.02.2007, 23:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja sagte ich doch bereits - du liest das EOF nicht da du ja exakte angaben in deiner datei hast, d.h nach dem letzten read steht nur noch das EOF im stream. prüf einfach nach deinem length-read ob die größe == 0 ist und mach ggf ein continue.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.02.2007, 23:03 Uhr
xXx
Devil


kk thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.02.2007, 17:38 Uhr
~der onkel
Gast


Hallo!

Weiß jemand vielleicht eine Antwort auf die folgende Frage eines Dozenten:

Welche Streams unterscheidet man in C. ?

Wäre schön, wenn jemand mal eine Antwort schreiben könnte

Liebe Grüße der Onkel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: