#include #include #include #define FALSE 0 #define TRUE !FALSE int fsize(char* file){ FILE* pFile = fopen(file,"rb"); int size; fseek (pFile, 0, SEEK_END); size=ftell (pFile); fclose(pFile); return size; } void Join(int argc, char* argv[]){ char out_text[256] = {0}; char* buffer; int size; FILE* pFile,* out; int i = 0; printf("nome de sada: "); scanf("%s", out_text); out = fopen(out_text,"wb"); size = fsize(argv[1]); buffer = malloc(size); for (i = 1; i < argc; i++){ printf("juntando parte %d\n",i); size = fsize(argv[i]); pFile = fopen(argv[i],"rb"); fread(buffer, size, 1, pFile); fclose(pFile); fwrite(buffer,size, 1, out); } fclose(out); } void Split(char* file){ FILE* pFile,* out; char out_text[256] = {0}; char* chunk; int chunk_size; int i,c; int size; int total = 0; int left; size = fsize(file); pFile = fopen(file,"rb"); printf("deseja dividir o arquivo em quantas partes? "); scanf("%d",&c); chunk_size = size / c; chunk = malloc(chunk_size); for (i = 0; i < c; i++){ sprintf(out_text,"%s.%03d",file,c); printf("writing %s\n",out_text); fseek(pFile, i * chunk_size, SEEK_SET); total += chunk_size; fread(chunk, chunk_size, 1, pFile); fopen(out_text,"wb"); fwrite(chunk,chunk_size, 1, out); fclose(out); } if (total < size){ sprintf(out_text,"%s.%03d",file,c); printf("writing %s\n",out_text); fseek(pFile, i * chunk_size, SEEK_SET); left = size - total; fread(chunk, left, 1, pFile); fopen(out_text,"wb"); fwrite(chunk,left, 1, out); fclose(out); } fclose(pFile); } int main(int argc, char *argv[]) { int i = 0; int split = FALSE; if (!strcmp(argv[1],"-s")){ split = TRUE; } if (split) Split(argv[2]); else Join(argc,argv); return 0; }