p.s. ho dimenticato di copiarti l'esempio di fwrite()/fread()
Questo appende n files (a tua scelta quanti e quali) in uno nuovo
Ci avevo messo anche parekki commenti quindi dovrebbe essere di facile comprensione
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 1024 //Grandezza in bytes del buffer
#define SLEN 20 //Lunghezza max nome files
void append(FILE *, FILE *); //Parametri: file da appendere, file in cui appendere
void main(){
FILE *fileAppend, *fileSource;
int files = 0; // Nr file appesi
char file_app[SLEN]; // Nome file in cui appendere tutti gli altri
char file_src[SLEN]; // Nome file da appendere
puts("Enter name of destination file:");
gets(file_app);
if(!(fileAppend = fopen(file_app, "a")))
abort();
//Ridefiniamo la dimensione del buffer. In tal modo possiamo passare fino a BUFSIZE bytes per volta
if(setvbuf(fileAppend, NULL, _IOFBF, BUFSIZE)){ //0 è il valore ritornato in caso di successo.
fputs("Can't create output buffer\n", stderr);
abort();
}
puts("Enter name of first source file (empty line to quit):");
while(gets(file_src) && file_src[0] != '\0'){ //Se il primo char della stringa ne indica la fine allora non è stato inserito nulla
if(strcmp(file_src, file_app) == 0)
fputs("Can't append file to itself\n",stderr);
else if(!(fileSource = fopen(file_src, "r"))){
fprintf(stderr, "Can't open %s\n", file_src);
break;
}
append(fileSource, fileAppend);
fclose(fileSource);
files++;
printf("File %s appended.\n", file_src);
puts("Next file (empty line to quit):");
}
printf("Done. %d files appended.\n", files);
fclose(fileAppend);
}
void append(FILE *source, FILE *dest){
size_t bytes;
static char temp[BUFSIZE]; //Variabile statica, allochiamo solo una volta.
while ((bytes = fread(temp,sizeof(char),BUFSIZE,source)) > 0)
fwrite(temp, sizeof(char), bytes, dest);
}