Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Poruszanie się po pliku (seekg(), tellg())

Ostatnio zmodyfikowano 2010-08-22 14:35
Autor Wiadomość
robaczek122
Temat założony przez niniejszego użytkownika
Poruszanie się po pliku (seekg(), tellg())
» 2010-08-22 13:27:50
Cześć!
Oto uproszczona wersja kodu, który nie działa tak jakbym chciał:
 
C/C++
#include <fstream>
#include <iostream>
using namespace std;

fstream dane;
string linijka;

int main()
{
    dane.open( "dane.txt", ios::in ); //otwarcie do czytania
    if( dane.good() == true )
    {
        cout << "otworzylem plik dane.txt" << endl << endl;
        while( !dane.eof() )
        {
            getline( dane, linijka );
            cout << linijka << endl;
        }
       
       
        dane.seekg( 0, ios::beg ); // dane.seekg (0,ios_base::beg); TEZ NIE DZIALA
        int GdzieJestem = dane.tellg();
        cout << "Jestes na: " << GdzieJestem << endl;
        getline( dane, linijka ); // pobiera ostatnia, a nie pierwsza linijke
        cout << linijka << endl; // a przynajmniej wyswietla ostatnia
       
        dane.close();
    }
    else
         cout << "nie udalo sie otworzyc pliku dane.txt" << endl;
   
   
    system( "PAUSE" );
    return( 0 );
}

I moje pytanie:
dlaczego pod koniec kodu, kiedy przeniosę wskaźnik na początek pliku, program pobiera mi ostatnią linijkę, a nie pierwsza.
Docelowo program działa tak, że usuwa wszystkie niechciane rzeczy z pliku, następnie wraca do początku i dalej coś z nim robi. Niestety mam problem z powrotem do początku pliku.

ps. Tak, tak wiem nie powinno być na końcu tego systemu...

edit: sorki, ale jakoś to "zawin nie chciało działać.
P-21105
ison
» 2010-08-22 14:11:51
gdy fstream napotka jakikolwiek błąd albo koniec pliku, zostaje w takim stanie przez cały czas, aby temu zapobiec i 'wywalić' ten stan, musisz dopisać:
C/C++
dane.clear();
przed
C/C++
dane.seekg( 0, ios::beg );

edit: sorki, ale jakoś to "zawin nie chciało działać.
zwin a nie zawin

pozdrawiam ;)
P-21107
robaczek122
Temat założony przez niniejszego użytkownika
» 2010-08-22 14:35:44
niezły trick, będę pamiętać na przyszłość.
Dzięki za pomoc!
;)
P-21108
« 1 »
  Strona 1 z 1