Appunti Archivi

Spiego il funzionamento di un archivio



Un'archivio è una base dati che ci permette di memorizzare informazioni riguardo, ad esempio, un gruppo di persone. Nell' organizzazione di un archivio è molto importante l'informazione, di un record, che identifica il record stesso, in quanto univoca. Quest' informazione è un codice numerico che chiameremo, per convenzione, pk (primary key).

Tutte le operazione sugli archivi vengono effettuate nei file dove sono salvati, permanentemente, gli archivi.


  • Operazioni effettuabili sugli archivi

  • Creazione archivio

  • Distruzione archivio

  • Visita archivio

  • Inserimento informazioni di un record

  • Cancellazione logica di un record

  • Modifica di un record
  • Frammenti di codice



    //costruttore (creazione)

    tGestioneArchivio::tGestioneArchivio()

    {

      //CREAZIONE ED APERTURA FILE

      ihf=open (nomeFile,O_RDWR|O_CREAT,0644);

      //SE NON RIESCE AD APRIRE IL FILE RESTITUISCE -1

      int pk=0;

      //inserisco la chiave primaria, come prima informazione del record, nel file creato

      write("archivio.dat",&pk,4);

      //chiudo il file

      close(ihf);
    }



    //distruttore

    tGestioneArchivio::~tGestioneArchivio()

    {

      //CHIUSURA FILE, SE APERTO

      if (ihf!=-1)

      {

          close(ihf);
      }

    }



    void tGestioneArchivio :: visita ()

    {

      tPersona app;

      lseek(ihf,0,SEEK_SET);

      while(read(ihf,&app,sizeof(tPersona))==sizeof(tPersona));

      {

          stampaInfo(&app);
      }

    }



    void tGestioneArchivio::stampaInfo(tPersona *app)

    {

      //stampa sullo schermo

      write(1,&app,sizeof(tPersona));
    }



    bool tGestioneArchivio :: cancellazioneLogica(int pk)

    {

      tPersona app;

      bool cancellato=0;

      int ricerca=ricercaLineare(pk);//restituisce -1 se non trova il record

      if (ricerca!=-1)

      {

          //apro il file archivio.dat per lettura e scrittura

          int ihf=open("archivio.dat",O_RDWR,0644);

          //vado alla posizione fisica, dopo averla calcolata

          lseek(ihf,sizeof(tPersona)*ricerca+sizeof(int),SEEK_SET);

          read(ihf,&app,sizeof(tPersona));

          appoggio.cancellato=1;

          lseek(ihf,-1l*sizeof(tPersona),SEEK_CUR);

          write(ihf,&app,sizeof(tPersona));

          //chiudo il file

          close(ihf);

          cancellato=1;
      }

      return cancellato;

    }
      
    indietro