Problema nella cancellazione di un record in un file sequenziale

di il
13 risposte

Problema nella cancellazione di un record in un file sequenziale

Hofatto questo codice e riesco a fare il primo passaggio di caricamento->lettura->cancellazione ma se lo rieseguo il programma non va… ti posto il codice delle due funzioni:

void caricofilefilm(films FT[]){
 
    FILE *file_filmregistry;
    char filename[] = "film_registry.txt";
    file_filmregistry = fopen("film_registry.txt", "r");
 
 
    FILE *file_filmregistrytemp;
    char filenametemp[] = "film_registrytemp.txt";
    file_filmregistrytemp = fopen(filenametemp, "w");
    int film_count;
            int total_film_count = INITIALIZER;
            total_film_count=count_rows(total_film_count);
    char ID_remove[3+1];
    int ID_remove_int=0;
    char riga[5000];
 
    char* token;
 
    const char delimiters[2]=";";
 
 
    rewind(file_filmregistry);
 
    //leggo il file
    //lettura fino alla fine del file
 
    printf("funziono\n");
    for (int i=0; i<total_film_count; i++){
        fgets(riga, sizeof(riga), file_filmregistry);      //lettura riga per riga
 
        token = strtok (riga, delimiters);
        strcpy(FT[i].id, token);
 
        token = strtok (NULL, delimiters);
        strcpy(FT[i].nome, token);
        token = strtok (NULL, delimiters);
        strcpy(FT[i].trama, token);
        token = strtok (NULL, delimiters);
        strcpy(FT[i].tipologia, token);
        token = strtok (NULL, delimiters);
        strcpy(FT[i].stagioni, token);
        token = strtok (NULL, delimiters);
        strcpy(FT[i].puntate, token);
        token = strtok (NULL, delimiters);
                                strcpy(FT[i].durata, token);
        printf("%s %s %s %s\n", FT[i].id, FT[i].nome, FT[i].trama, FT[i].tipologia);
}
    fclose(file_filmregistry);
    fclose(file_filmregistrytemp);
}
 
 
void eliminarecord(films FT[]){
 
    FILE *file_filmregistry;
    char filename[] = "film_registry.txt";
    file_filmregistry = fopen(filename, "r");
 
 
    FILE *file_filmregistrytemp;
    char filenametemp[] = "film_registrytemp.txt";
    file_filmregistrytemp = fopen(filenametemp, "w");
            int total_film_count = INITIALIZER;
            total_film_count=count_rows(total_film_count);
    char ID_remove[3+1];
        int ID_remove_int=0;
        char riga[5000];
 
        char* token;
 
        const char delimiters[2]=";";
        int i=0;
        int scelta=0;
 
        rewind(file_filmregistry);
 
        printf("dato da visualizzar?:");
        scanf("%d", &scelta);
        printf("%s - %s - %s - %s - %s - %s\n", FT[scelta-1].id, FT[scelta-1].nome, FT[scelta-1].trama, FT[scelta-1].tipologia, FT[scelta-1].stagioni, FT[scelta-1].puntate, FT[scelta-1].durata);
            strcpy(FT[scelta-1].id, " ");
            strcpy(FT[scelta-1].nome, " ");
            strcpy(FT[scelta-1].trama, " ");
            strcpy(FT[scelta-1].tipologia, " ");
            strcpy(FT[scelta-1].stagioni, " ");
            strcpy(FT[scelta-1].puntate, " ");
            strcpy(FT[scelta-1].durata, " ");
            printf("%s - %s - %s - %s - %s - %s\n", FT[scelta-1].id, FT[scelta-1].nome, FT[scelta-1].trama, FT[scelta-1].tipologia, FT[scelta-1].stagioni, FT[scelta-1].puntate, FT[scelta-1].durata);
 
 
            printf("%d", total_film_count);
 
            for(i=0;i<total_film_count;i++){
                if(strcmp(FT[i].id, " ")){
 
                    fprintf(file_filmregistrytemp, "%s;%s;%s;%s;%s;%s\n", FT[i].id, FT[i].nome, FT[i].trama, FT[i].tipologia, FT[i].stagioni, FT[i].puntate, FT[i].durata);
                }
            }
 
 
 
            fclose(file_filmregistry);
            fclose(file_filmregistrytemp);
            remove(filename);
            rename(filenametemp, filename);
    }

13 Risposte

Devi accedere o registrarti per scrivere nel forum
13 risposte