Frage zu ifstream und tellg()



  • Hallo, ich wollte in meinem Code folgendes realisieren:

    //Größe der Datei ermitteln und in file_size speichern
    std::ifstream::pos_type file_size ( file.tellg() );
    if(file_size == -1) //gucken, ob alles geklappt hat
    

    Auf der C++-Reference habe ich gelesen, dass tellg() -1 zurück gibt, wenn ein Fehler aufgetreten ist. Wenn ich aber file_size mit -1 vergleiche, bekomme ich eine Fehlermeldung:

    error: ambiguous overload for 'operator==' in 'file_size == -0x000000001'
    note: candidates are: operator==(std::streamoff, int) <built-in>|
    note:                 bool std::fpos<_StateT>::operator==(const std::fpos<_StateT>&) const [with _StateT = mbstate_t]|
    

    Weiss jemand, wo der Fehler liegt?



  • Sieht so aus, als müsstest du std::ifstream::pos_type(-1) schreiben...
    Oder aber

    std::ifstream::pos_type npos(-1)
    und dann eben
    if(file_size == npos)

    bb



  • Stimmt, das hat geholfen. Danke


  • Mod

    unskilled schrieb:

    Sieht so aus, als müsstest du std::ifstream::pos_type(-1) schreiben...
    Oder aber

    std::ifstream::pos_type npos(-1)
    und dann eben
    if(file_size == npos)

    bb

    Keine Notwendigkeit für Indirektion:

    if(file_size == std::ifstream::pos_type(-1))
    

    Jedoch wird npos wahrscheinlich sowieso wegoptimiert...



  • SeppJ schrieb:

    Keine Notwendigkeit für Indirektion:

    if(file_size == std::ifstream::pos_type(-1))
    

    Jedoch wird npos wahrscheinlich sowieso wegoptimiert...

    Vermut ich auch mal ganz stark 😛
    außerdem find ich es so, wie du es jz gemacht hast, nicht wirklich lesbar 😛

    bb

    PS: Warum werd ich denn ständig ausgeloggt? 😣
    Hab mich heut sicher schon 10mal einloggen müssen - und ich bin erst 15Uhr aufgestanden 😉



  • unskilled @logged-off schrieb:

    SeppJ schrieb:

    Keine Notwendigkeit für Indirektion:

    if(file_size == std::ifstream::pos_type(-1))
    

    Jedoch wird npos wahrscheinlich sowieso wegoptimiert...

    Vermut ich auch mal ganz stark 😛
    außerdem find ich es so, wie du es jz gemacht hast, nicht wirklich lesbar 😛

    bb

    PS: Warum werd ich denn ständig ausgeloggt? 😣
    Hab mich heut sicher schon 10mal einloggen müssen - und ich bin erst 15Uhr aufgestanden 😉

    Na dann guten Morgen! 🙂



  • Ist std::ifstream::pos_type denn nicht einfach nur ein typedef auf size_t, wie es bei std::string::size_type oder std::vector<T>::size_type ist ?



  • typedef auf char_traits::pos_type oder so^^
    wieso?

    bb



  • Wenn die ganzen verschiedenen X::size_type's alle im Endeffeckt nur typedefs auf size_t wären, dürfte es ja eigentlich keine Probleme geben, die mit "-1" zu vergleichen, oder?



  • Gilder schrieb:

    Wenn die ganzen verschiedenen X::size_type's alle im Endeffeckt nur typedefs auf size_t wären, dürfte es ja eigentlich keine Probleme geben, die mit "-1" zu vergleichen, oder?

    ist nicht ganz richtig - gibt schon mal mind. ne signed/unsigned missmatch warning^^
    außerdem sollte der pos_type kein size_t sein - wird vermutlich nen (signed) long long sein - bin ich mir aber nicht sicher und ich glaub auch nicht, dass das vom standard vorgeschrieben wird...

    ich würds wie gesagt mit dem npos helper machen...

    bb



  • ok - vermutlich ists doch nicht so einfach^^
    ich würd ja auch mal gucken, wie es die msvc-lib macht, allerdings ist mein msvc hier zu doof, zur deklaration zu gehen...
    sizeof(string::pos_type) ist aber schonmal 24^^

    bb



  • unskilled @logged-off schrieb:

    PS: Warum werd ich denn ständig ausgeloggt? 😣
    Hab mich heut sicher schon 10mal einloggen müssen - und ich bin erst 15Uhr aufgestanden 😉

    Lösch mal die Cookies. Ich hatte schon ähnliche Probleme mit dem Forum und konnte sie so beheben.



  • Nexus schrieb:

    unskilled @logged-off schrieb:

    PS: Warum werd ich denn ständig ausgeloggt? 😣
    Hab mich heut sicher schon 10mal einloggen müssen - und ich bin erst 15Uhr aufgestanden 😉

    Lösch mal die Cookies. Ich hatte schon ähnliche Probleme mit dem Forum und konnte sie so beheben.

    Jopp - siehe Forentechnik - aber danke 😉
    Naja - ich lösch bei jedem solchen Problem die c-plusplus[x] -Cookies... Allerdings hatte ich trotzdem 3-4h lang keine Chance, länger als einen Post lang eingeloggt zu bleiben... Irgendwie scheint das aber "normal" zu sein - hab jz an 2 komplett versch. PCs das gleiche Problem gehabt... Letzte mal war aber eigtl schon nen ganzes Weilchen her...

    bb



  • unskilled schrieb:

    Jopp - siehe Forentechnik - aber danke 😉
    Naja - ich lösch bei jedem solchen Problem die c-plusplus[x] -Cookies... Allerdings hatte ich trotzdem 3-4h lang keine Chance, länger als einen Post lang eingeloggt zu bleiben... Irgendwie scheint das aber "normal" zu sein - hab jz an 2 komplett versch. PCs das gleiche Problem gehabt... Letzte mal war aber eigtl schon nen ganzes Weilchen her...

    bb

    Ich hatte das mal in einem anderem Forum.. War sehr ärgerlich, weil ich nicht mal für die Länge eines Posts eingeloggt war. 😉



  • drakon schrieb:

    unskilled schrieb:

    Jopp - siehe Forentechnik - aber danke 😉
    Naja - ich lösch bei jedem solchen Problem die c-plusplus[x] -Cookies... Allerdings hatte ich trotzdem 3-4h lang keine Chance, länger als einen Post lang eingeloggt zu bleiben... Irgendwie scheint das aber "normal" zu sein - hab jz an 2 komplett versch. PCs das gleiche Problem gehabt... Letzte mal war aber eigtl schon nen ganzes Weilchen her...

    bb

    Ich hatte das mal in einem anderem Forum.. War sehr ärgerlich, weil ich nicht mal für die Länge eines Posts eingeloggt war. 😉

    xD
    naja - mit genügend geduld bleibt man iwann eingeloggt^^
    aber wie du siehst, musste ich ja auch mehrere posts als unregg posten, weil ich mich gar nicht erst einloggen konnte... xD
    wenn ich wüsste, wo das problem genau liegen würde, hätte ich auch nicht ca. 30mal die c++ cookies löschen müssen 😣
    bin beim googlen aber auf mehrere leute gestoßen, die das problem mal hatten - es wird meist auf den browser geschoben und das keine cookies akzeptiert werden... kann aber nicht alles sein - hab auch mind. einen gefunden, der mit der 3er version von phpbb noch das prob hatte... scheint also noch keiner rausbekommen zu haben, wieso das so ist...

    bb



  • unskilled schrieb:

    bin beim googlen aber auf mehrere leute gestoßen, die das problem mal hatten - es wird meist auf den browser geschoben und das keine cookies akzeptiert werden... kann aber nicht alles sein - hab auch mind. einen gefunden, der mit der 3er version von phpbb noch das prob hatte... scheint also noch keiner rausbekommen zu haben, wieso das so ist...

    bb

    Hmm. Der Fehler tritt nur höchst sporadisch auf.. (Aber dann gehäuft.. :S). Ich finde den Fehler auch recht merkwürdig, weil ich ihn auch auf verschiedenen Boards hatte.. Bist du einverstanden, wenn wir das auf die Illuminaten schieben? - Jemand muss es ja sein..



  • drakon schrieb:

    Hmm. Der Fehler tritt nur höchst sporadisch auf.. (Aber dann gehäuft.. :S).

    jopp 😣

    drakon schrieb:

    Ich finde den Fehler auch recht merkwürdig, weil ich ihn auch auf verschiedenen Boards hatte..

    Ich nicht - nur hier... Aber bin auch nicht bei all zu vielen Foren aktiv...

    drakon schrieb:

    Bist du einverstanden, wenn wir das auf die Illuminaten schieben? - Jemand muss es ja sein..

    :D:D:D
    als ob ich dir wiedersprechen würde ;o)

    bb


Log in to reply