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

Odczyt vektora struktur z pliku binarnego

Ostatnio zmodyfikowano 2013-12-16 00:58
Autor Wiadomość
Kefirek
Temat założony przez niniejszego użytkownika
Odczyt vektora struktur z pliku binarnego
» 2013-12-15 08:23:21
Witam forumowiczów!

Napisałem krótki program konsolowy:
- wprowadzenie danych z klawiatury do zmiennych vektora struktur
- zapis tych danych do pliku binarnego
- odczyt danych z pliku do vektora struktur.

Wprowadzenie danych Ok
Zapis danych do pliku OK - plik jet utworzony fizycznie istnieje, dane są ios::app, plik zwiększa swoją objętość
Odczyt danych z pliku - błąd programu.

Poniżej przedstawiam listing programu:

C/C++
// vektor.cpp: Określa punkt wejścia dla aplikacji konsoli.
//

#include "stdafx.h"
#include "iostream"
#include "fstream"
#include <vector>
#include "string"


using namespace std;

struct klient
{
    string nazwa;
    double kg;
    double price;
};

vector < klient > vektor;

int ilu_klientow;

void Dodaj_klienta();
void Show_wprow_dane();
void Zapis_plik();
void Odczyt_do_ekranu();

int _tmain( int argc, _TCHAR * argv[] )
{
   
    system( "chcp 1250" );
    system( "cls" );
   
    Dodaj_klienta();
    Show_wprow_dane();
    Zapis_plik();
    Odczyt_do_ekranu();
    cout << endl;
    system( "PAUSE" );
    return 0;
}

void Dodaj_klienta()
{
    cout << "Ilu klientów chcesz wprowadzić: ";
   
    cin >> ilu_klientow;
    klient kupujacy;
    for( int i = 0; i < ilu_klientow; ++i )
    {
        cout << "Wprowadź nazwę klienta: ";
        cin.get();
        getline( cin, kupujacy.nazwa );
        cout << "Ile kg sprzedano: ";
        cin >> kupujacy.kg;
        cout << "Podaj cenę za kilogram: ";
        cin >> kupujacy.price;
        vektor.push_back( kupujacy );
       
    }
   
   
}


void Show_wprow_dane()
{
    cout << "Wprowadzono dane: " << endl;
    for( int i = 0; i < ilu_klientow; ++i )
    {
       
        cout << vektor[ i ].nazwa << endl;
        cout << vektor[ i ].kg << endl;
        cout << vektor[ i ].price << endl;
    }
   
    cout << endl;
}

void Zapis_plik()
{
   
   
    ofstream do_pliku( "Kontrahenci.txt", ios::out | ios::app | ifstream::binary ); // otwarcie pliku
   
    do_pliku.write(( char * ) & vektor.front(), vektor.size() * sizeof( klient ) ); //zapis binarny do pliku
   
    do_pliku.close();
}

void Odczyt_do_ekranu() //wczytanie z pliku do pól struktury i odczyt na ekran
{
   
    ifstream do_ekranu( "C:\\Users\Dell\\Documents\\Visual Studio 2012\\Projects\\vektor\\vektor\\Kontrahenci.txt", ios::in | ios::beg | ifstream::binary );
    int j = 0;
    while( do_ekranu.read(( char * ) & vektor[ j ], sizeof( vektor[ j ] ) ) )
    {
       
       
        cout << vektor[ j ].nazwa << endl;
        cout << vektor[ j ].kg << endl;
        cout << vektor[ j ].price << endl;
        j++;
       
    }
}


[ cpp ]

Mo ż e kto ś znajdzie przyczyn ę b ł ę du odczytu z pliku ???????
Z g ó ry dzi ę kuje zainteresowanym
Pozdrawiam
Kefirek
P-99240
pekfos
» 2013-12-15 11:30:23
Nie możesz tak zapisać takiej struktury.
P-99247
Kefirek
Temat założony przez niniejszego użytkownika
» 2013-12-15 11:46:07
Jakieś wskazówki co jest źle , bo zapis do pliku się udaje, oraz odczyt 1 - go rekordu też potem wywala błąd
P-99253
pekfos
» 2013-12-15 11:57:03
Nie możesz tak zapisać std::string (ani, tym bardziej, odczytać).
P-99258
Kefirek
Temat założony przez niniejszego użytkownika
» 2013-12-15 14:32:44
Rozumiem, że chodzi o pole struktury , które jest stringiem ????
P-99278
pekfos
» 2013-12-15 15:22:18
Tak. W ten sposób nie zapiszesz tekstu. Masz dwa wyjścia: Zamiast std::string użyj tablicy char - używanie struktury będzie trochę trudniejsze, zapis i odczyt pozostanie jaki jest. Druga opcja to zostaw strukturę jak jest, ale zapisuj tekst w formie c-stringa zmiennej długości, ale wtedy odczyt i zapis będzie trudniejszy.
P-99283
Kefirek
Temat założony przez niniejszego użytkownika
» 2013-12-15 20:47:24
Wiele godzin już spędziłem w necie szukając rozwiązania i próbując samemu znaleźć przyczynę niemożności odczytu danych z pliku binarnego do vektora struktur.
Potrzeba mi kogoś kto naprawdę jest dobry , sam skompiluje program i wskaże rozwiązanie.
Oczywiście jestem wdzięczny za dotychczasowe podpowiedzi niestety nie pomogły mi one rozwiązać problemu.
Pozdrawiam i .......nadal.........czekam na tego dobrego programistę który dałby radę to zrobić
P-99329
Monika90
» 2013-12-15 20:54:10
Na ten temat już było: http://cpp0x.pl/forum/temat/​?id=10983

sam skompiluje program
Po co kompilować, pełen błędów program?
P-99330
« 1 » 2 3 4
  Strona 1 z 4 Następna strona