Pliki binarne
Ostatnio zmodyfikowano 2019-01-25 12:54
CDSW Temat założony przez niniejszego użytkownika |
Pliki binarne » 2019-01-22 18:46:12 Tworzę program na zaliczenie. Jest to baza wycieczek i są one zapisywane w pliku binarnym. Potrzebuję pomocy w napisaniu funkcji usuwającej wybraną przez nas wycieczkę. if( a == 3 ) { system( "cls" ); cout << "Ktora wycieczke usunac?" << endl; fstream file2( "trip.bin", ios::binary | ios::out | ios::in ); fstream file( "trip.bin", ios::binary | ios::in | ios::out ); strip whichtrip; for( int i = 1;; i++ ) { file.read( reinterpret_cast < char *>( & whichtrip ), sizeof( whichtrip ) ); if( file.eof() ) break; cout << i << ". " << whichtrip.where << endl; } int b, z; cin >> b; strip deltrip; for( b; b < howmt; b++ ) { int wsk = b * sizeof( whichtrip ); file.seekg( wsk ); file.read( reinterpret_cast < char *>( & deltrip ), sizeof( deltrip ) ); file2.seekp( wsk - sizeof( whichtrip ) ); file2.write( reinterpret_cast < char *>( & deltrip ), sizeof( deltrip ) ); } file.close(); file2.close(); }
Próbowałem rozwiązać problem sposobem podstawiania wycieczek które są za wybraną o miejsce -1. Niestety nie działa to w sposób taki jak zamierzony na początku. Planowałem pobierać całą strukturę wycieczki do zmiennej i wklejać ją w miejsce wycieczki wybranej do usunięcia czynność miała się powtarzać z każdą wycieczką aż do końca pliku. Ma ktoś może pomysł jak to ma działać. Dodatkowo w następnym podpunkcie muszę zrobić edycje wycieczek. |
|
pekfos |
» 2019-01-22 20:08:21 Nie otwieraj tego samego pliku 2 razy. Niczego w ten sposób nie rozwiązujesz, a zapis do pliku nie będzie działać poprawnie. Próbowałem rozwiązać problem sposobem podstawiania wycieczek które są za wybraną o miejsce -1. |
Ostatniego rekordu tak nie usuniesz, przyda się to https://en.cppreference.com/w/cpp/filesystem/resize_file |
|
CDSW Temat założony przez niniejszego użytkownika |
» 2019-01-25 12:54:40 Tak wygąda rozwiązanie problemu int b; strip tdel;
cout << "Ktorą wycieczke chcesz usunąc?" << endl; fstream file( "trip.dat", ios::binary | ios::in | ios::out ); strip whichtrip;
for( int i = 1;; i++ ) { file.read( reinterpret_cast < char *>( & whichtrip ), sizeof( whichtrip ) ); if( file.eof() ) break; cout << i << ". " << whichtrip.where << endl; } file.close(); cin >> b;
while( cin.fail() ) { cin.clear(); cin.ignore( INT_MAX, '\n' ); cout << "Podaj NUMER" << endl; cin >> b; } ofstream out( "temp.dat", ios::binary ); ifstream in( "trip.dat", ios::binary ); for( int i = 1;; i++ ) { in.read(( char * ) & tdel, sizeof( tdel ) ); if( in.eof() ) break; if( i != b ) out.write(( char * ) & tdel, sizeof( tdel ) ); } in.close(); out.close(); remove( "trip.dat" ); rename( "temp.dat", "trip.dat" );
file.close(); |
|
« 1 » |