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

Pliki binarne

Ostatnio zmodyfikowano 2019-01-25 12:54
Autor Wiadomość
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ę.

C/C++
if( a == 3 ) { //wybór w menu usuwania wycieczki.
    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.
P-173654
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
P-173655
CDSW
Temat założony przez niniejszego użytkownika
» 2019-01-25 12:54:40
Tak wygąda rozwiązanie problemu

C/C++
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++ ) //wypisanie listy wycieczek
{
    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();
P-173675
« 1 »
  Strona 1 z 1