[C]Lettura e scrittura file

Pubblicità

ilfe98

Utente Èlite
Messaggi
3,083
Reazioni
1,317
Punteggio
134
C'è un esercizio che definita una funzione:
extern int accodaTuttiFile(const char *fileConNomi, const char *fileOutput)
devo aprire in modalità tradotta fileconnomi questo file contiene nomi di file(riga per riga es: file 1.txt\n file2.txt.\n) da aprire successivamente in modalità lettura binaria e copiare ogni singolo byte alla fine del fileOutput e ritornare il numero dei file letti.
ho fatto questa funzione,ma non va sapreste correggermi?
C:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
extern int accodaTuttiFile(const char *fileConNomi, const char *fileOutput) {
    FILE *fin = fopen(fileConNomi, "rt");
    if (!fin)
        return 0;
    FILE *fout = fopen(fileOutput, "wb");
    if (!fout)
        return 0;
    char temp[255];
    int len = 0;
    int ret = 0;
    while(fgets(temp, 255, fin)!=NULL)
    {
        temp[strcspn(temp, "\n")] = 0;
        FILE *f = fopen(temp, "rb");
        fseek(f, 0, SEEK_END);
        len = ftell(f);
        rewind(f);
        fread(fout, sizeof(char), len, f);
        ret++;
    }
    return ret;
    
}
 
Quando vai a portare la auto dal meccanico, dici "non funziona" o invece descrivi il problema (per esempio "fa un rimore strano quando supero i 200 all'ora") :)
Nel tuo caso, dopo solo una veloce letta del codice, mi pare ci siano file che apri senza chiudere, la lettura dell'ultimo carattere dei file e' completamente errata e, specialmente... non scrivi i valori nel file di uscita!

PS i condizionali di questo tipo proprio non li mando giu'
Codice:
    FILE *fin = fopen(fileConNomi, "rt");
    if (!fin)
la variabile 'fin' e il puntatore di un file, cosa vuole dire !fin? L'operatore ! richiede una espressione booleana, vero o falso, NON un puntatore. In C funziona perche' implicitamente "prende" come valore Vero qualunque cosa che non sia zero! In altri compilatori (tipo C#) ti darebbe subito errore. Il modo corretto per accertarsi di un errore e' controllare che l'istruzione 'fopen' ritorni un puntatore valido:
Codice:
    FILE *fin = fopen(fileConNomi, "rt");
    if (fin == NULL) // errore!
 
Pubblicità
Pubblicità
Indietro
Top