Czyszczony plik przy wyświetlaniu

0

Mam problem z wczytywaniem, mianowicie po wczytaniu i wyświetleniu, plik zostaje wyczyszczony. Nie wiem w którym momencie to następuje. Proszę o jakąkolwiek podpowiedź.

Fragmenty kodu wpływające na wyswietlanie:

string Klient :: dodajKlienta(void)
{
    string wiersz;
    wiersz.append(to_string(numerID));
    wiersz.append(",");
    wiersz.append(nazwa);
    wiersz.append(",");
    wiersz.append(to_string(NIP));
    wiersz.append(",");
    wiersz.append(to_string(kodPocztowy));
    wiersz.append(",");
    wiersz.append(miejscowosc);
    wiersz.append(",");
    wiersz.append(adres);

    return wiersz;
}

Funkcja dzieląca:

vector<string> Wyodrebnij(string wiersz)
{
    vector<string> skladowe;
    string bazowa;
  
    stringstream kolumna(wiersz);
    while (getline(kolumna, bazowa, ','))
        if(!bazowa.empty())
        {
            skladowe.push_back(bazowa);
        }
    return skladowe;
}

vector<string> Wyodrebnij(string wiersz, char ciag)
{
    vector<string> skladowe;
    string bazowa;
  
    stringstream kolumna(wiersz);
    while (getline(kolumna, bazowa, ciag))
        if(!bazowa.empty())
        {
            skladowe.push_back(bazowa);
        }

    return skladowe;
}

void Baza :: klientDodaj()
{
    if(otwartyPlik == true)
    {
        string wiersz;
        while (! plik.eof() )
    {
        getline(plik, wiersz);

        if(wiersz.find("")!= string::npos)
        {
            vector<string> podziel=Wyodrebnij(wiersz,',');
            for(int i=6; i<(int)podziel.size(); i++);
            podziel[0].erase(0,0);
            podziel[1].erase(0,0);
            podziel[2].erase(0,0);
            podziel[3].erase(0,0);
            podziel[4].erase(0,0);
            podziel[5].erase(0,0);
            Klient *KlientN = new Klient(atoi(podziel[0].c_str()), podziel[1].c_str(), atoi(podziel[2].c_str()), atoi(podziel[3].c_str()), podziel[4].c_str(), podziel[5].c_str() );
            Klienci.push_back(KlientN);
            KlientN=NULL;
        }


    }
    plik.close();
    otwartyPlik = false;
    }
}

Fragment z maina:

    // Operacje na pliku
    Baza plik(wejscie);

    if(plik.bladPliku == false)
    {
        //  tu będą metody wyszukiwania
        plik.wyswietlPlik(wejscie);
    }
    else
    {
        cout << "Sciezka pliku z baza danych jest niepoprawna!" << endl << endl;
    }
0

A jak go otwierasz? Otwórz go tylko do czytania.

0

Otwieram bez przypisanych parametrów. Takie rozwiązanie nie jest zadowalające.

0

Wklej wiersz w którym otwierasz plik.

0
Baza :: Baza(string nazwaPliku) : nazwaPliku(nazwaPliku)
{
    string wiersz;
    plik.open( nazwaPliku, ios :: in | ios :: out);
    if( plik.is_open() )
    {
        otwartyPlik = true;
        bladPliku = false;
        klientDodaj();
    }
    else
    {
        otwartyPlik = false;
        bladPliku = true;
    }
}

bool Baza :: Otwarty()
{
    return otwartyPlik;
}
0

No to jak go otwarłeś jako ios::out to co się dziwisz? o_O
Na przyszłość: należy ROZUMIEĆ kod który się kopiuje skoro nie umiesz sam napisać.

0

Nie skopiowałem, rozumiem to co napisałem.
ios :: out jest celowo umieszczone, żeby plik można było później nadpisać.

Czy w przypadku nie zapisywania niczego do tego pliku, program automatycznie nadpisuje?

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