codice:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define EXTENSION ".part"
#define SINTAX_ERROR "Hai digitato male il comando o uno dei parametri"
#define READ_ERROR "Errore di lettura dal file indicato"
#define BUFF_LN 50
#define OK 0
#define KO 1
/**concatena il nuemro con l'estenzione
*@param num numero del file
*@param *str2 stringa da concatenzare
*@return nome file composto da un nuemro identificativo e estensione
*/
char *strConcat(unsigned long int num,const char *str2){
char *str,str1[BUFF_LN];
int i,j;
itoa(num,str1,10);
str=(char *)calloc(sizeof(char),strlen(str1)+strlen(str2)+1);
assert(str!=NULL);
for(i=0;i<strlen(str1);i++)
str[i]=str1[i];
for(j=0;j<strlen(str2);j++)
str[i+j]=str2[j];
str[i+j]='\0';
return str;
}/*strConcat*/
/**controla se un file esiste
*@param nomeFile il nome del file
*@return OK se il file esiste, altrimenti KO
*/
int fileExist(const char *nomeFile){
FILE *file;
if((file=fopen(nomeFile,"r+b"))==NULL)
return KO;
else
return OK;
}/*fileExist*/
/**La funzione taglia il file originale in file + piccoli con dimensioen scelta
*@param pesoFile dimensione di ogni parte del file in byte
*@param nomefile[] nome del file di input
*@return esito dell'elaborazione
*/
int split(unsigned long int pesoFile,char nomeFile[]){
FILE *in,*out;
char buff;
unsigned long int contaByte=0;
unsigned long int contaFile=0;
if((in=fopen(nomeFile,"rb"))==NULL){
printf("%s",READ_ERROR);
return 1;
}/*Apertura file di input*/
while(!feof(in)){
if((out=fopen(strConcat(contaFile,EXTENSION),"wb"))==NULL){
printf("%s",READ_ERROR);
fclose(in);
return 1;
}/*apro un nuovo out ogni volta*/
while(contaByte<pesoFile && !feof(in)){
fread(&buff,sizeof(char),1,in);
fwrite(&buff,sizeof(char),1,out);
contaByte++;
}/*end while fino ache non finisco i byte per questa parte*/
contaByte=0;
contaFile++;
fclose(out);
}/*end while*/
fclose(in);
fclose(out);
return 0;
}/*split*/
/**La funzione unisce in un unico file le parti trovate
*@return esito dell'elaborazione
*/
int join(){
FILE *in,*out;
char buff;
unsigned long int contaFile=0;
if((out=fopen("out","ab"))==NULL){
printf("%s",READ_ERROR);
return 1;
}/*Apertura file di output*/
do{
if((in=fopen(strConcat(contaFile,EXTENSION),"rb"))==NULL){
printf("%s",READ_ERROR);
fclose(out);
return 1;
}/*apro un nuovo out ogni volta*/
while(!feof(in)){
fread(&buff,sizeof(char),1,in);
fwrite(&buff,sizeof(char),1,out);
}/*end while fino ache non finisco i byte per questa parte*/
fclose(in);
}while(!fileExist(strConcat(++contaFile,EXTENSION)));
fclose(in);
fclose(out);
return 0;
}/*join*/
int main(int argv,char *argc[]){
if(argc[3]!=""){
if(!strcmp(argc[1],"-s")){
if(atoi(argc[2])>0)
split(atoi(argc[2]),argc[3]);
else
printf("%s",SINTAX_ERROR);
}else{
if(!strcmp(argc[1],"-j"))
join();
else
printf("%s",SINTAX_ERROR);}
}else
printf("%s",SINTAX_ERROR);
return 0;
}/*main*/
il programma da dei problemi nelle giunzioni tra 2 parti di file, hio provato a splittare una immagine e poi a unirla, si vede, però nelel giunzioni tra le diverse parti ci sono alcuni errori. Non riesco a capire perchè