Problem mit tellg()



  • Hi

    ich lese eine datei über einen fstream ein und möchte das einlesen gerne zu einem späteren zeitpunkt fortsetzen.
    Dafür will ich mit

    dateiPos = datei.tellg();
    

    die Position in der Datei abspeichern.
    Der Wert wird aber immer auf 0 gesetzt, auch wenn ich schon über 5000Byte eingelesen habe. Was mache ich den da falsch.

    dateipos ist vom typ long.

    fstream datei;
        int anzByte = 0;
        char Buffer[1024];
        int pC = 0;
        datei.clear();
        datei.open(Datei.c_str(), ios::in);
        datei.seekp( dateiPos, ios_base::beg);
        if(datei.good() && datei.is_open())
        {
          while(!datei.eof() && pC < 4)
          {
            for(int i = 0; i < 1024 && !datei.eof();i++)
            {
              Buffer[i] = datei.get();
              anzByte = i;
            }
            //Daten verarbeiten
            pC++;
            //ClientSocket1->Socket->SendBuf(Buffer,999);
          }
          if(datei.eof())
          {
            //Ok Datei zuende.
            Datei = "";
          }
          else
          {
            Datei = "c:\\pagefile001.bmp";
            //Position abspeichern.
            dateiPos = datei.tellg();
    
          }
          datei.close();
    


  • Erstens: Wo hast du denn Datei und dateiPos definiert? Womöglich sind sie ja zwischenzeitlich aus dem Scope gefallen.

    Zweitens: Du solltest mal im Debugger verfolgen, wo genau sich der Wert zurücksetzt. Und eventuell solltest du auch die übrigen Fehlerbits des Streams abfragen (vor allem fail()) und noptfalls zurücksetzen (clear()).

    Drittens: Um die Leseposition des Streams festzulegen, verwendet mann seekg() und nicht seekp() (letzteres setzt die Schreibposition).


Anmelden zum Antworten