wewnętrzny wskaźnik pliku przy odczytywaniu

0

Witam, w moim programie używam pliku .txt którego używam zarówno do odczytu jak i zapisu, zauważyłem że jeżeli otworze go z atrybutem st::ate to odczyt getlinem jest niemożliwy i z tego co wyczytałem w google to dlatego bo jest jakiś wewnętrzny wskaźnik, który wskazuje na odczytywane miejsce w pliku a ten tryb ustawia go na końcu.
Tak więc przy odczytywaniu pliku zamykam go dla trybu ate i otwieram dla zwykłego std::in, tu pojawia się problem bo mam funkcję

bool sprawdz_login_haslo(std::string login,std::string haslo){
            while(std::getline(uzytkownicy,tmp)){
                                     log=tmp.substr(0,tmp.find("-"));
                                     has=tmp.substr(tmp.find("-")+3,tmp.size()-1);
                                     if(login==log&&haslo==has){zwracana=true;break;}
                                     } 
            return zwracana;
}

uzytkownicy to fstream
i póki podaje dane wejściowe które mogę odnaleźć w tym pliku to wszystko działa, a jeżeli podam dane których nie ma to przy następnym uruchomieniu funkcja daje złe wyniki.

Łatwiej wytłumaczyć to na przykładzie, plik mamy z zawartoscia:

ohoho---ahaha
pawel---jutro
uio---uio

teraz wywolajmy funkcje dla arg("ohoho","ahaha") daje true, i dla ("uio","uio") tez daje true(czyli prawidlowo), ale jeżeli uruchomie ją dla dowolnych danych nie znajdujacych sie w pliku, np ("aaaa","bbbb") to tu da prawidlowy wynik ale przy nastepnym uruchomieniu dla danych ("ohoho","ahaha") wyniki juz sa błędne.

podejzewam ze ma to coś wsólnego z tym wskaźnikiem przoszę o pomoc, dodam że przed każdem wywołaniem funkcji zamykam i na nowo otwieram plik

0

Sprawdź metodę seekg().

0

dzięki twojej odpowiedzi natrafiłem na funkcje clear(), wystarczy po każdemy otworzeniu pliku wywolac uzytkownicy.clear() i działa, a to ponieważ... (nie wiem dokładnie dlaczego mniej więcej ta funkcja czyści dane...)

1 użytkowników online, w tym zalogowanych: 0, gości: 1