Cancellare parte di un file

di il
4 risposte

Cancellare parte di un file

Salve a tutti,sto realizzando una rubrica con varie funzioni,questa rubrica l'ho salvata su file , una delle funzioni che vorrei inserire è quella di cancellare un contatto , ma non so come farlo , o meglio so che dovrei utilizzare un file di appoggio ma non ho capito bene il resto , potreste aiutarmi con qualche esempio?

4 Risposte

  • Re: Cancellare parte di un file

    Più che esempi, avresti necessità di studiare la teoria della gestione dei file (sequenziali e binari).

    Che tipo di file vorresti usare?
  • Re: Cancellare parte di un file

    oregon ha scritto:


    Più che esempi, avresti necessità di studiare la teoria della gestione dei file (sequenziali e binari).

    Che tipo di file vorresti usare?
    La rubrica l'ho salvata in un normale file di testo,nella funzione cancella dovrei creare un nuovo file di appoggio e ci dovrei copiare tutto il contenuto che voglio mantenere escluso il contatto che voglio cancellare giusto?Perchè seguendo questo procedimento non saprei come copiare per esempio dal contatto 1 al 20 e volendo cancellare il 21 ripartire a copiare nel file di appoggio dal 22 in poi.
  • Re: Cancellare parte di un file

    Cosa non sapresti fare?

    Crei il nuovo file da scrivere, leggi con un ciclo tutti i dati precedenti (o li prendi dalla memoria se li hai in qualche struttura nel programma), non utilizzi il nome da cancellare e continui a riscrivere i seguenti. Poi cancelli l'originale e rinomini il nuovo.
  • Re: Cancellare parte di un file

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <stdio.h>
    #define MAX 2
    using namespace std;

    struct Persona
    {
    char nome[20];
    string cognome;
    char Residenza[30];
    char Data_Nascita[20];
    };

    void Aggiungi(Persona *p,FILE *f);
    void Cancella(Persona *p,FILE *f);
    void Ricerca(Persona *p,FILE *f);
    void Ricerca_cognome(Persona *p,FILE *f);
    void InserisciContatto(Persona *p,FILE *f);

    int main()
    {
    int scelta1;// scelta dell'utente al primo menu
    int scelta2;// scelta dell'utente al secondo menu

    Persona *p; //puntatore alla struttura Persona
    p=new Persona;

    FILE *f;
    f=fopen("pippo.txt","w"); // apertura file in modalità di scrittura
    cout << "-------------Menu-------------"<<endl;
    cout << "1.Inserisci contatti."<<endl;
    cout << "2.Esci dalla rubrica."<<endl;
    cin >> scelta1;
    if (scelta1 == 1)
    {
    InserisciContatto(p,f);
    }
    else
    {
    if (scelta1==2)
    {
    return 0;
    }
    }

    cout << "-------------Menu-------------"<<endl;
    cout << "1.Aggiungi un contatto."<<endl;
    cout << "2.Cancella un contatto."<<endl;
    cout << "3.Ricerca un contatto."<<endl;
    cin >> scelta2;
    if (scelta2==1)
    {
    Aggiungi(p,f);
    }
    else
    {
    if (scelta2==2)
    {
    Cancella(p,f);
    }
    else
    {
    if (scelta2==3)
    {
    Ricerca(p,f);
    }
    }
    }

    for(int i=0;i<MAX;i++)
    {
    p=NULL;
    delete p;
    }
    fclose(f);

    return 0;
    }

    void Cancella(Persona *p,FILE *f)
    {
    int x;
    int j=0;
    FILE *a;
    a=fopen("cancella.txt","w");
    cout << "Inserisci numero contatto da cancellare : ";
    cin >> x;
    do
    {
    for(int i=0;i<MAX;i++)
    {
    cout << "Nome : ";
    cout << p->nome;
    cout << "Cognome : ";
    cout << p->cognome;
    cout << "Residenza : ";
    cout << p->Residenza;
    cout << "Data di nascita : ";
    cout << p->Data_Nascita;
    }
    }
    while (fseek (f,(x-1)*sizeof(Persona),SEEK_SET)==0);

    }


    Qui ho provato nella funzione Cancella a stampare tutti i contatti finchè il programma non arriva alla struttura Persona da saltare,ma il programma così il programma stampa all'infinito il contatto da saltare;sapete drimi come correggere la condizione del while?
Devi accedere o registrarti per scrivere nel forum
4 risposte