[C++] Zapis edytowanej wartości do pliku binarnego
Ostatnio zmodyfikowano 2017-02-03 10:29
mrost13 Temat założony przez niniejszego użytkownika |
[C++] Zapis edytowanej wartości do pliku binarnego » 2017-02-02 14:42:46 Witam! Podczas pisania jednego z programów trafiłem na mały problem- otóż gdy w pliku binarnym mam zapisany jeden rekord to funkcjonalność jest spełniana (edycja rekordu). Gdy dodaję drugi rekord to podczas próby edycji pierwszego rekordu rekord nr. 2 zostaje zapisany na miejscu rekordu nr. 1 Edycja rekordu numer 2 działa bez problemu. Przy większej ilości rekordów edycja działa dla kolejnych tylko nie dla nr. 1 (zostaje on zastąpiony danymi z nr. 2) Sam nie widzę już błędu, więc liczę na pomoc forumowiczów, za którą z góry dziękuję :) Podaję kod funkcji: void sprzedaj() { towary t; int ile_sprzedac = 0; bool czy_jest = false; char nazwa[ 64 ]; int pozycja = 0; cout << "Nazwa: "; cin >> nazwa; ifstream plik1( "towary.dat", ios::binary | ios::app | ios::out | ios::in ); while( 1 ) { if( plik1.eof() ) break; { plik1.read( reinterpret_cast < char *>( & t ), sizeof( t ) ); pozycja++; if( strcmp( nazwa, t.nazwa ) == 0 ) { cout << "Ilosc: "; cout << t.ilosc; czy_jest = true; cout << endl << "Ile sprzedac: "; cin >> ile_sprzedac; while( t.ilosc < ile_sprzedac ) { cout << "Nie ma tylu sztuk, podaj jeszcze raz: "; cin >> ile_sprzedac; } t.ilosc = t.ilosc - ile_sprzedac; if( t.ilosc < t.ilosc_min ) { zamowienie( t ); t.ilosc = t.ilosc_max; } while( 1 ) { plik1.read( reinterpret_cast < char *>( & t ), sizeof( t ) ); if( plik1.eof() ) break; if( strcmp( nazwa, t.nazwa ) == 0 ) { plik1 >> t.ilosc; } } } cout << endl << endl; } } if( czy_jest == false ) { cout << "nie ma takiego produktu w bazie"; getch(); } plik1.close(); ofstream plik2( "towary.dat", ios::binary | ios::in | ios::ate ); plik2.seekp( sizeof( struct towary ) *( pozycja - 1 ) ); plik2.write( reinterpret_cast < char *>( & t ), sizeof( t ) ); plik2.close(); system( "cls" ); menu(); }
|
|
1aam2am1 |
» 2017-02-02 18:12:14 Poco po wczytaniu i edycji t, jeżeli nazwy się zgadzają. Czytasz drugi raz plik? |
|
j23 |
» 2017-02-03 10:29:41 A nie lepiej wczytać wszystkie rekordy do vectora, edytować sobie go, a pod koniec zapisać całość z powrotem do pliku? |
|
« 1 » |