Odczyt vektora struktur z pliku binarnego
Ostatnio zmodyfikowano 2013-12-16 00:58
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:
#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 ); do_pliku.write(( char * ) & vektor.front(), vektor.size() * sizeof( klient ) ); do_pliku.close(); }
void Odczyt_do_ekranu() { 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
|
|
pekfos |
» 2013-12-15 11:30:23 Nie możesz tak zapisać takiej struktury. |
|
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 |
|
pekfos |
» 2013-12-15 11:57:03 Nie możesz tak zapisać std::string (ani, tym bardziej, odczytać). |
|
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 ???? |
|
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. |
|
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ć |
|
Monika90 |
» 2013-12-15 20:54:10 |
|
« 1 » 2 3 4 |