Découpage de fichiers

Description

Voici le code les gars! J'espère que vous n'allez plus rouspéter. Par défaut, le découpage se fait sur le c: , pour le faire sur les autres lecteurs, il faut utiliser l'option réseau.

Source / Exemple :


#include<fcntl.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<dir.h>
#include<dos.h>
#include<io.h>

#define BUFSIZE 1024
#define effln(y) eff(1,y)

char dirsrc[201]="",dirdest[201]="",ordisrc[81]="",ordidest[81]="",inputfile[81];
char O_COPY[]="  Wincut 2.0   Copyright  Olivier MBIELEU - Avril 2002"; // Variable pour le copyright. Si elle est modifiée, wincut ne pourra plus regenérer les fichiers de la version précédente
char Tempmdf[201],Tempsrc[201],Tempdir[201]; // Variables temporaires pour
int nbfile=0,Taille=1000,filesupp=0;

void affmess(char *s1,int col,int bgc){ //Cette Fonction affiche un message (s1) avec la couleur col et le bgcolor bgc 
  char tmp[81]; char* ncopy(char*,char*,int);
  textcolor(col);textbackground(bgc);gotoxy(2,18);
  if(strlen(s1)>78){
	ncopy(s1,tmp,78);
	cprintf("%s",tmp);
	gotoxy(2,19);cprintf("%s",s1+79);
    }
   else cprintf("%s",s1);
  textcolor(15);gotoxy(1,1);
 };

void effmess(void){  //Cette Fonction efface le message affiché par affmess
  //void eff(int,int);
  effln(18);effln(19);
 };

void afftaille(void){ // Cette fonction affiche la taille des petits fichiers à créer
  char s[91]="Wincut 2.0 -- La Taille Des Fichiers Découpés Est De ",s1[10];
  itoa(Taille,s1,10);strcat(s,s1);strcat(s," Ko");
  int n=strlen(s);int x=(79-n)/2+1;
  gotoxy(1,25);textbackground(1);textcolor(14);clreol();
  gotoxy(x,25);cprintf("%s",s);
  textbackground(0);textcolor(15);
 };

//Function Error

void error(char *s1,char* s2){ // Cette Fonction affiche les messages d'erreurs
  void eff(int,int);
  textbackground(4);textcolor(14);
  gotoxy(1,21);clreol();
  cprintf(" Erreur : %s",s1);
  if(s2[0])cprintf(" : %s",s2);
  getch();textcolor(15);textbackground(0);
  effln(21);effln(22);effln(23);
 };

//Op?rations Sur Les Chaines De Caract?res
char *ncopy(char *src,char *dest, int n){ // Cette Fonction copie n caractéres de src à dest = strncpy
  dest[0]='\0';
  if(n<=0)return dest;
  int i=-1;
  while(i++,i<n && src[i]) dest[i]=src[i];
  dest[i]='\0';
  return dest;
 };

char *addext(char *s,char *ext){ // Cette fonction ajoute une extension (fich.cpp)
  strcat(s,".");strcat(s,ext);
  return s;
 };

char *retext(char *src,char *file,char *ext){ // Cette Fonction retire l'extension (fich.cpp)
  int i=0;
  while(src[i] && src[i]!='.') i++;
  if(src[i]=='\0'){ext[0]='\0';strcpy(file,src);}
  else{ncopy(src,file,i);strcpy(ext,&src[i+1]);}
  return file;
 };

char * cutspace(char* s){ // Cette fonction retire les espaces présent dans une chaine
  int i=0,j=-1;char tmp[200];
  do{
    j++;
    if(s[j]!=' ')tmp[i++]=s[j];
  }while(s[j]);
  strcpy(s,tmp);
  return s;
 };

char* read(char *rep,int x1,int y,int lg){ // Cette fonction lit une chaine de caractères à l'écran
  int x=x1,i=0;
  char a;rep[0]='\0';
  gotoxy(x1-3,y);cprintf(":->");
  while(a=getch(),a!=13 && a!=27){
    if(a!=8){if(x<=x1+lg){i++;gotoxy(x,y);cprintf("%c",a);
		     rep[i-1]=a;x+=1;}else printf("\a");
	       }
	else if(x>x1){x-=1;rep[--i]='\0';gotoxy(x,y);cprintf(" ");gotoxy(x,y);
		  } else printf("\a");
   };rep[i]='\0';
  return cutspace(rep);
 };

//Menus

void actbgcolor(void){textcolor(15);textbackground(4);};
void noactbgcolor(void){textcolor(15);textbackground(1);};
void eff(int x,int y){textcolor(15);textbackground(0);gotoxy(x,y);clreol();};
char* makesrcfile(void); int creatfiles(int); int restorefile(void);

void genetverif(void){ // Cette fonction génére les petits fichiers
 char tmp[105],tmp1[72];
 int ok=0;
 affmess(" Entrer Le Nom Du R?pertoire o? se Trouve le Fichier Source(ex Olivier)",14,0);
 read(dirsrc,4,19,70);
 effmess();
 affmess(" Entrer Le Nom Du Fichier ? D?couper",14,0);
 read(inputfile,4,19,30);
 effmess();
 strcpy(tmp,"c:/");
 strcat(tmp,dirsrc);if(dirsrc[0]) strcat(tmp,"/");strcat(tmp,inputfile);
 if(access(tmp,00)){
   error("Le Fichier Sp?cifi? N'existe Pas",tmp);
   ok=1;
  };
 if(!ok){
   affmess(" Entrer Le Nom du R?portoire o? Copier Les Petits Fichiers (ex Carole)",14,0);
   read(dirdest,4,19,75);
   effmess();
   strcpy(tmp,"c:/");strcat(tmp,dirdest);strcpy(tmp1,tmp);
   strcat(tmp,"/");strcat(tmp,"test.$$$");FILE *fp=fopen(tmp,"w");
   if(!fp){affmess(" Ce r?pertoire N'existe Pas. Le Cr?er (o/n) ? ",14,0);int c=getch();
	   effmess();
	   if(c=='o' || c=='O'){
	     if(mkdir(tmp1)!=0){error("Impossible De Cr?er Le R?pertoire",tmp1);ok=1;}
	   }else ok=1;
	  }
    else {fclose(fp);remove(tmp);};
   if(!ok){
     int srcfile;
     makesrcfile();_dos_open(Tempsrc,O_RDONLY,&srcfile);
     creatfiles(srcfile);
     _dos_close(srcfile);
    };
  };
 if(ok) error("La G?n?ration des Fichiers Est Impossible !","");
  else {affmess(" Op?ration Effectu?e Avec Succ?s  Appuyer Sur Une Touche ...",14,1);getch();effmess();};
 };

void menugen(void){
 char *Tab[]={" Machine Locale "," Locale->R?seau "," R?seau->Locale "," R?seau->R?seau "};
 int i=0,ch=12,xd=5,yd=3,y;
 char mess[161];
 noactbgcolor();
 gotoxy(xd,yd);cprintf("%s",Tab[0]);
 gotoxy(xd,yd+2);cprintf("%s",Tab[1]);
 gotoxy(xd,yd+4);cprintf("%s",Tab[2]);
 gotoxy(xd,yd+6);cprintf("%s",Tab[3]);
 i=0;y=yd;
 while(ch!=27){
   actbgcolor();gotoxy(xd,y);cprintf("%s",Tab[i]);gotoxy(1,1);
   ch=getch();
   noactbgcolor();gotoxy(xd,y);cprintf("%s",Tab[i]);
   switch(ch){
     case 72:if(i==0){i=3;y=yd+6;}else {i--;y-=2;};break;
     case 80:if(i==3){i=0;y=yd;}  else {i++;y+=2;};break;
     case 13:effln(yd);effln(yd+2);effln(yd+4);effln(yd+6);
	     switch(i){
	       case 0:ordisrc[0]='\0';ordidest[0]='\0';genetverif();
		      break;
	       case 1:{ordisrc[0]='\0';
		       char tmp[105],tmp1[72];
		       int ok=0;
		       affmess(" Entrer Le Nom Du R?pertoire o? se Trouve le Fichier Source(ex Olivier)",14,0);
		       read(dirsrc,4,19,70);
		       effmess();
			   affmess(" Entrer Le Nom Du Fichier ? D?couper",14,0);
		       read(inputfile,4,19,30);
		       effmess();
		       strcpy(tmp,"c:/");
		       strcat(tmp,dirsrc);if(dirsrc[0])strcat(tmp,"/");strcat(tmp,inputfile);
		       if(access(tmp,00)){
			  error("Le Fichier Sp?cifi? N'existe Pas",tmp);
			  ok=1;
			};
		       if(!ok){
			 affmess(" Entrer Le Nom R?seau De La Machine destination",14,0);
			 read(ordidest,4,19,19);
			 effmess();
			 affmess(" Entrer Le Nom R?seau Du Disque Destination",14,0);
			 read(dirdest,4,19,21);
			 effmess();
			 affmess(" Entrer Le Nom du R?portoire o? Copier Les Petits Fichiers (ex Carole)",14,0);
			 read(tmp,4,19,75);strcat(dirdest,"/");strcat(dirdest,tmp);
			 effmess();
			 strcpy(tmp,"//");strcat(tmp,ordidest);strcat(tmp,"/");
			 strcat(tmp,dirdest);strcpy(tmp1,tmp);
			 strcat(tmp,"/");strcat(tmp,"test.$$$");FILE *fp=fopen(tmp,"w");
			 if(!fp){affmess(" Ce r?pertoire N'existe Pas. Le Cr?er (o/n) ? ",14,0);int c=getch();
			 effmess();
			 if(c=='o' || c=='O'){
			    if(mkdir(tmp1)!=0){error("Impossible De Cr?er Le R?pertoire",tmp1);ok=1;}
			   }else ok=1;
			  }
			 else {fclose(fp);remove(tmp);};
			 if(!ok){
			   int srcfile;char* makesrcfile(void); int creatfiles(int);
			   makesrcfile();_dos_open(Tempsrc,O_RDONLY,&srcfile);
			   creatfiles(srcfile);
			   _dos_close(srcfile);
			  };
			 };
		       if(ok) error("La G?n?ration des Fichiers Est Impossible !","");
			else {affmess(" Op?ration Effectu?e Avec Succ?s  Appuyer Sur Une Touche ...",14,1);getch();effmess();};
		       break;
		      };
		   case 2:{ordidest[0]='\0';
		       char tmp[105],tmp1[72];
		       int ok=0;
		       affmess(" Entrer Le Nom R?seau De La Machine Source",14,0);
		       read(ordisrc,4,19,19);
		       effmess();
		       affmess(" Entrer Le Nom R?seau Du Disque Source",14,0);
		       read(dirsrc,4,19,21);
		       effmess();
		       affmess(" Entrer Le Nom du R?portoire o? Se Trouve Le Fichier Source (ex Carole)",14,0);
		       read(tmp,4,19,75);strcat(dirsrc,"/");strcat(dirsrc,tmp);
		       effmess();
		       affmess(" Entrer Le Nom Du Fichier ? D?couper",14,0);
		       read(inputfile,4,19,30);
		       effmess();
		       strcpy(tmp,"//");strcat(tmp,ordisrc);strcat(tmp,"/");
		       strcat(tmp,dirsrc);strcat(tmp,"/");strcat(tmp,inputfile);
		       if(access(tmp,00)){
			 error("Le Fichier Sp?cifi? N'existe Pas",tmp);
			 ok=1;
			};
		       if(!ok){
			  affmess(" Entrer Le Nom du R?portoire o? Copier Les Petits Fichiers (ex Carole)",14,0);
			  read(dirdest,4,19,75);
			  effmess();
			  strcpy(tmp,"c:/");strcat(tmp,dirdest);strcpy(tmp1,tmp);
			  strcat(tmp,"/");strcat(tmp,"test.$$$");FILE *fp=fopen(tmp,"w");
			  if(!fp){affmess(" Ce r?pertoire N'existe Pas. Le Cr?er (o/n) ? ",14,0);int c=getch();
			  effmess();
			  if(c=='o' || c=='O'){
			     if(mkdir(tmp1)!=0){error("Impossible De Cr?er Le R?pertoire",tmp1);ok=1;}
			     }else ok=1;
			    }
			      else {fclose(fp);remove(tmp);};
			    if(!ok){
			    int srcfile;
			    makesrcfile();_dos_open(Tempsrc,O_RDONLY,&srcfile);
			    creatfiles(srcfile);
			    _dos_close(srcfile);
			  };
			 };
			 if(ok) error("La G?n?ration des Fichiers Est Impossible !","");
			  else {affmess(" Op?ration Effectu?e Avec Succ?s  Appuyer Sur Une Touche ...",14,1);getch();effmess();};
		      break;};
	       case 3:{ordidest[0]='\0';
		       char tmp[105],tmp1[72];
		       int ok=0;
		       affmess(" Entrer Le Nom R?seau De La Machine Source",14,0);
		       read(ordisrc,4,19,19);
		       effmess();
		       affmess(" Entrer Le Nom R?seau Du Disque Source",14,0);
		       read(dirsrc,4,19,21);
		       effmess();
		       affmess(" Entrer Le Nom du R?portoire o? Se Trouve Le Fichier Source (ex Carole)",14,0);
		       read(tmp,4,19,75);strcat(dirsrc,"/");strcat(dirsrc,tmp);
		       effmess();
		       affmess(" Entrer Le Nom Du Fichier ? D?couper",14,0);
		       read(inputfile,4,19,30);
		       effmess();
		       strcpy(tmp,"//");strcat(tmp,ordisrc);strcat(tmp,"/");
			   strcat(tmp,dirsrc);strcat(tmp,"/");strcat(tmp,inputfile);
		       if(access(tmp,00)){
			 error("Le Fichier Sp?cifi? N'existe Pas",tmp);
			 ok=1;
			};
		       if(!ok){
			  affmess(" Entrer Le Nom R?seau De La Machine destination",14,0);
			  read(ordidest,4,19,19);
			  effmess();
			  affmess(" Entrer Le Nom R?seau Du Disque Destination",14,0);
			  read(dirdest,4,19,21);
			  effmess();
			  affmess(" Entrer Le Nom du R?portoire o? Copier Les Petits Fichiers (ex Carole)",14,0);
			  read(tmp,4,19,75);strcat(dirdest,"/");strcat(dirdest,tmp);
			  effmess();
			  strcpy(tmp,"//");strcat(tmp,ordidest);strcat(tmp,"/");
			  strcat(tmp,dirdest);strcpy(tmp1,tmp);
			  strcat(tmp,"/");strcat(tmp,"test.$$$");FILE *fp=fopen(tmp,"w");
			  if(!fp){affmess(" Ce r?pertoire N'existe Pas. Le Cr?er (o/n) ? ",14,0);int c=getch();
			  effmess();
			  if(c=='o' || c=='O'){
			     if(mkdir(tmp1)!=0){error("Impossible De Cr?er Le R?pertoire",tmp1);ok=1;}
			     }else ok=1;
			    }
			      else {fclose(fp);remove(tmp);};
			    if(!ok){
			    int srcfile;
			    makesrcfile();_dos_open(Tempsrc,O_RDONLY,&srcfile);
			    creatfiles(srcfile);
			    _dos_close(srcfile);
			  };
			 };
			 if(ok) error("La G?n?ration des Fichiers Est Impossible !","");
			  else {affmess(" Op?ration Effectu?e Avec Succ?s  Appuyer Sur Une Touche ...",14,1);getch();effmess();};
		      break;}
	      };
	     return;
    };
  };
 effln(yd);effln(yd+2);effln(yd+4);effln(yd+6);
 };

void menurest(void){
 char *Tab[]={" Machine Locale "," Locale->R?seau "," R?seau->Locale "," R?seau->R?seau "};
 int i=0,ch=12,xd=20,yd=3,y;
 char mess[161];
 noactbgcolor();
 gotoxy(xd,yd);cprintf("%s",Tab[0]);
 gotoxy(xd,yd+2);cprintf("%s",Tab[1]);
 gotoxy(xd,yd+4);cprintf("%s",Tab[2]);
 gotoxy(xd,yd+6);cprintf("%s",Tab[3]);
 i=0;y=yd;
 while(ch!=27){
   actbgcolor();gotoxy(xd,y);cprintf("%s",Tab[i]);gotoxy(1,1);
   ch=getch();
   noactbgcolor();gotoxy(xd,y);cprintf("%s",Tab[i]);
   switch(ch){
     case 72:if(i==0){i=3;y=yd+6;}else {i--;y-=2;};break;
     case 80:if(i==3){i=0;y=yd;}  else {i++;y+=2;};break;
     case 13:effln(yd);effln(yd+2);effln(yd+4);effln(yd+6);
	     switch(i){
	       case 0:{ordisrc[0]='\0';ordidest[0]='\0';char tmp[81],tmp1[101];int ok=0;
		      affmess(" Entrer Le Nom Du R?pertoire O? Se Trouve Le Fichier WCT.LST",14,0);
		      read(dirsrc,4,19,51);
		      effmess();
		      strcpy(tmp,"c:/");
		      if(dirsrc[0]){strcat(tmp,dirsrc);strcat(tmp,"/wct.lst");}
		       else strcat(tmp,"wct.lst");
		      if(access(tmp,00)){
			error("Le Fichier Ou R?pertoire Sp?cifi? N'existe Pas",tmp);
			ok=1;
		      };
		      if(!ok){
		       affmess(" Entrer Le Nom Du R?pertoire O? Reconstituer Le Fichier",14,0);
		       read(dirdest,4,19,51);
		       effmess();
		       strcpy(tmp,"c:/");strcat(tmp,dirdest);strcpy(tmp1,tmp);
		       strcat(tmp,"/");strcat(tmp,"test.$$$");FILE *fp=fopen(tmp,"w");
		       if(!fp){affmess(" Ce r?pertoire N'existe Pas. Le Cr?er (o/n) ? ",14,0);int c=getch();
		       effmess();
		       if(c=='o' || c=='O'){
			  if(mkdir(tmp1)!=0){error("Impossible De Cr?er Le R?pertoire",tmp1);ok=1;}
			 }else ok=1;
			}
		       else {fclose(fp);remove(tmp);};
		      };
		      if(!ok){makesrcfile();
			      restorefile();
			     }
		      if(ok) error("La Reg?n?ration des Fichiers Est Impossible !","");
			else {affmess(" Op?ration Effectu?e Avec Succ?s  Appuyer Sur Une Touche ...",14,1);getch();effmess();};
		      break;
		     };
	       case 1:{ordisrc[0]='\0';ordidest[0]='\0';char tmp[81],tmp1[101];int ok=0;
		      affmess(" Entrer Le Nom Du R?pertoire O? Se Trouve Le Fichier WCT.LST",14,0);
		      read(dirsrc,4,19,51);
		      effmess();
		      strcpy(tmp,"c:/");
		      if(dirsrc[0]){strcat(tmp,dirsrc);strcat(tmp,"/wct.lst");}
			else strcat(tmp,"wct.lst");
		      if(access(tmp,00)){
			error("Le Fichier Ou R?pertoire Sp?cifi? N'existe Pas",tmp);
			ok=1;
		      };
		      if(!ok){
		       affmess(" Entrer Le Nom R?seau De La Machine destination",14,0);
		       read(ordidest,4,19,19);
		       effmess();
		       affmess(" Entrer Le Nom R?seau Du Disque Destination",14,0);
		       read(dirdest,4,19,21);
		       effmess();
		       affmess(" Entrer Le Nom Du R?pertoire O? Reconstituer Le Fichier",14,0);
		       read(tmp,4,19,75);strcat(dirdest,"/");strcat(dirdest,tmp);
		       effmess();
		       strcpy(tmp,"//");strcat(tmp,ordidest);strcat(tmp,"/");
		       strcat(tmp,dirdest);strcpy(tmp1,tmp);
		       strcat(tmp,"/");strcat(tmp,"test.$$$");FILE *fp=fopen(tmp,"w");
		       if(!fp){affmess(" Ce r?pertoire N'existe Pas. Le Cr?er (o/n) ? ",14,0);int c=getch();
		       effmess();
		       if(c=='o' || c=='O'){
			  if(mkdir(tmp1)!=0){error("Impossible De Cr?er Le R?pertoire",tmp1);ok=1;}
			 }else ok=1;
			}
		       else {fclose(fp);remove(tmp);};
		      };
		      if(!ok){makesrcfile();
			      restorefile();
			     }
		      if(ok) error("La Reg?n?ration des Fichiers Est Impossible !","");
			else {affmess(" Op?ration Effectu?e Avec Succ?s  Appuyer Sur Une Touche ...",14,1);getch();effmess();};
		       break;};
	       case 2:{ordisrc[0]='\0';ordidest[0]='\0';char tmp[81],tmp1[101];int ok=0;
		      affmess(" Entrer Le Nom R?seau De La Machine Source (WCT.LST)",14,0);
		      read(ordisrc,4,19,19);
		      effmess();
		      affmess(" Entrer Le Nom R?seau Du Disque Source (WCT.LST)",14,0);
		      read(dirsrc,4,19,21);
		      effmess();
		      affmess(" Entrer Le Nom Du R?pertoire O? Se Trouve Le Fichier WCT.LST",14,0);
		      read(tmp,4,19,75);strcat(dirsrc,"/");strcat(dirsrc,tmp);
		      effmess();
		      strcpy(tmp,"//");strcat(tmp,ordisrc);strcat(tmp,"/");
		      strcat(tmp,dirsrc);strcat(tmp,"/wct.lst");
		      affmess("Patienter ...",14,0);
		      if(access(tmp,00)){
			error("Le Fichier Ou R?pertoire Sp?cifi? N'existe Pas",tmp);
			ok=1;
		      };effmess();
		      if(!ok){
		       affmess(" Entrer Le Nom Du R?pertoire O? Reconstituer Le Fichier",14,0);
		       read(dirdest,4,19,51);
		       effmess();
		       strcpy(tmp,"c:/");strcat(tmp,dirdest);strcpy(tmp1,tmp);
		       strcat(tmp,"/");strcat(tmp,"test.$$$");affmess("Patienter ...",14,0);
		       FILE *fp=fopen(tmp,"w");effmess();
		       if(!fp){affmess(" Ce r?pertoire N'existe Pas. Le Cr?er (o/n) ? ",14,0);int c=getch();
		       effmess();
		       if(c=='o' || c=='O'){
			  if(mkdir(tmp1)!=0){error("Impossible De Cr?er Le R?pertoire",tmp1);ok=1;}
			 }else ok=1;
			}
		       else {fclose(fp);remove(tmp);};
		      };
		      if(!ok){makesrcfile();
			      restorefile();
			     }
		      if(ok) error("La Reg?n?ration des Fichiers Est Impossible !","");
			else {affmess(" Op?ration Effectu?e Avec Succ?s  Appuyer Sur Une Touche ...",14,1);getch();effmess();};
		      break;};
	       case 3:{ordisrc[0]='\0';ordidest[0]='\0';char tmp[81],tmp1[101];int ok=0;
		      affmess(" Entrer Le Nom R?seau De La Machine Source (WCT.LST)",14,0);
		      read(ordisrc,4,19,19);
		      effmess();
		      affmess(" Entrer Le Nom R?seau Du Disque Source (WCT.LST)",14,0);
		      read(dirsrc,4,19,21);
		      effmess();
		      affmess(" Entrer Le Nom Du R?pertoire O? Se Trouve Le Fichier WCT.LST",14,0);
		      read(tmp,4,19,75);strcat(dirsrc,"/");strcat(dirsrc,tmp);
		      effmess();
		      strcpy(tmp,"//");strcat(tmp,ordisrc);strcat(tmp,"/");
		      strcat(tmp,dirsrc);strcat(tmp,"/wct.lst");
		      affmess("Patienter ...",14,0);
		      if(access(tmp,00)){
			error("Le Fichier Ou R?pertoire Sp?cifi? N'existe Pas",tmp);
			ok=1;
		      };effmess();
		      if(!ok){
		       affmess(" Entrer Le Nom R?seau De La Machine destination",14,0);
		       read(ordidest,4,19,19);
		       effmess();
		       affmess(" Entrer Le Nom R?seau Du Disque Destination",14,0);
		       read(dirdest,4,19,21);
		       effmess();
		       affmess(" Entrer Le Nom Du R?pertoire O? Reconstituer Le Fichier",14,0);
		       read(tmp,4,19,75);strcat(dirdest,"/");strcat(dirdest,tmp);
		       effmess();
		       strcpy(tmp,"//");strcat(tmp,ordidest);strcat(tmp,"/");
		       strcat(tmp,dirdest);strcpy(tmp1,tmp);
		       strcat(tmp,"/");strcat(tmp,"test.$$$");FILE *fp=fopen(tmp,"w");
		       if(!fp){affmess(" Ce r?pertoire N'existe Pas. Le Cr?er (o/n) ? ",14,0);int c=getch();
		       effmess();
		       if(c=='o' || c=='O'){
			  if(mkdir(tmp1)!=0){error("Impossible De Cr?er Le R?pertoire",tmp1);ok=1;}
			 }else ok=1;
			}
		       else {fclose(fp);remove(tmp);};
		      };
		      if(!ok){makesrcfile();
			      restorefile();
			     }
		      if(ok) error("La Reg?n?ration des Fichiers Est Impossible !","");
			else {affmess(" Op?ration Effectu?e Avec Succ?s  Appuyer Sur Une Touche ...",14,1);getch();effmess();};
		       break;};
	      };
	     return;
    };
  };
 effln(yd);effln(yd+2);effln(yd+4);effln(yd+6);
 };

void menuoption(void){
 static char *Tabopt[]={"   Taille    "," Supprimer   "};
 int i=0,ch=12,xd=35,yd=3,y;
 char mess[161];
 noactbgcolor();
 gotoxy(xd,yd);cprintf("%s",Tabopt[0]);
 gotoxy(xd,yd+2);cprintf("%s",Tabopt[1]);
 i=0;y=yd;
 while(ch!=27){
   actbgcolor();gotoxy(xd,y);cprintf("%s",Tabopt[i]);gotoxy(1,1);
   ch=getch();
   noactbgcolor();gotoxy(xd,y);cprintf("%s",Tabopt[i]);
   switch(ch){
     case 72:if(i==0){i=1;y=yd+2;} else {i--;y-=2;};break;
     case 80:if(i==1){i=0;y=yd;} else {i++;y+=2;};break;
     case 13:effln(yd);effln(yd+2);//effln(yd+4);effln(yd+6);
	     switch(i){
	       case 0:{char s[11];int tel;
		       affmess(" Entrer La Taille Des Fichiers D?coup?s (En Ko)",14,0);
		       read(s,4,19,5);
		       effmess();tel=atoi(s);
			   if(tel>0) Taille=tel;
		       afftaille();
		       break;
		      };
	       case 1:{ if(filesupp){
			  filesupp=0;
			  Tabopt[1][strlen(Tabopt[1])-2]=' ';
			 }
			else {
			  filesupp=1;
			  Tabopt[1][strlen(Tabopt[1])-2]='';
			 };
		       break;
		      };
	      };
	     return;
    };
  };
 effln(yd);effln(yd+2);//effln(yd+4);effln(yd+6);
 };

void affaide(void){
 int y=3;
 textbackground(0);textcolor(14);
 gotoxy(1,y++);cprintf("- Wincut est un programme qui d?coupe de gros fichiers en de petits fichiers.");
 gotoxy(1,y++);cprintf("- Son but principal est de permettre de transporter de gros fichiers de machine   en machine.");y++;
 gotoxy(1,y++);cprintf("- Le menu G?n?rer permet de d?couper de gros fichiers. Il pr?sente les options");
 gotoxy(1,y++);cprintf("  Machine Locale qui permet de g?n?rer les petits fichiers ? partir de la machi");
 gotoxy(1,y++);cprintf("  ne locale, Locale->R?seau envoie les petits fichiers dans une machine distant");
 gotoxy(1,y++);cprintf("  e, R?seau->Locale prend un gros fichier en r?seau et le d?coupe dans la machi");
 gotoxy(1,y++);cprintf("  ne locale, R?seau->R?seau qui prend un fichier en r?seau et envoie le r?sulta");
 gotoxy(1,y++);cprintf("  t dans une autre machine distante.");
 gotoxy(1,y++);cprintf("- Le menu Restaurer permet de reconstituer le gros fichier ? partir des petits.");
 gotoxy(1,y++);cprintf("  Les options de ce menu ont la m?me signification que les options du menu pr?c");
 gotoxy(1,y++);cprintf("  ?dent ? la seule diff?rence qu'ils s'appliquent aux petits fichiers.");
 gotoxy(1,y++);cprintf("- Le menu Option permet de modifier la taille des petits fichiers ainsi que de ");
 gotoxy(1,y++);cprintf("  supprimer ou non les petits fichiers lors de la Restauration.");
 gotoxy(1,y++);cprintf("- Le menu Aide appelle cette Aide et Quitter de quitter le programme.");
 textcolor(15+128);
 gotoxy(1,y++);cprintf("- IMPORTANT! Les noms de fichiers doivent ?tre des noms Dos.");
 textcolor(14);
 gotoxy(1,y++);
 gotoxy(1,y++);cprintf("-                Wincut est un programme libre d'utilisation.");
 gotoxy(1,y++);
 gotoxy(1,y++);cprintf("-        Copyright Avril 2002 -- Olivier MBIELEU (oliviermbieleu@yahoo.fr)");
 gotoxy(1,1);
 getch();
 for(int x=3;x<=y;x++){
   gotoxy(1,x);
   clreol();
  };
 textcolor(15);
 };

void mainmenu(void){
  char *Tab[]={" G?n?rer "," Restaurer "," Options "," Aide "," Quitter "};
  int i=0,x,xd=7,yd=1,ch=2;
  noactbgcolor();gotoxy(1,1);clreol();
  gotoxy(xd,yd);cprintf("%s",Tab[0]);
  gotoxy(xd+15,yd);cprintf("%s",Tab[1]);
  gotoxy(xd+30,yd);cprintf("%s",Tab[2]);
  gotoxy(xd+45,yd);cprintf("%s",Tab[3]);
  gotoxy(xd+60,yd);cprintf("%s",Tab[4]);
  x=xd;i=0;afftaille();
  while(1){
	actbgcolor();gotoxy(x,yd);cprintf("%s",Tab[i]);gotoxy(1,1);
	ch=getch();
	noactbgcolor();gotoxy(x,yd);cprintf("%s",Tab[i]);
	switch(ch){
	  case 75:if(i==0){i=4;x=xd+60;} else {i--;x-=15;};
		  break;
	  case 77:if(i==4){i=0;x=xd;} else {i++;x+=15;};
		  break;
	  case 16:
		  actbgcolor();gotoxy(x,yd);cprintf("%s",Tab[i]);gotoxy(1,1);
		  affmess("Voulez-Vous Vraiment Quitter Ce Programme ?(o/n) : ",14,0);int c=getch();
		  if(c!='o' && c!='O'){
		   effmess();noactbgcolor();gotoxy(x,yd);cprintf("%s",Tab[i]);
		   break;};
		  textcolor(15);textbackground(0);clrscr();return;
	  case 13:case 80:
		actbgcolor();gotoxy(x,yd);cprintf("%s",Tab[i]);gotoxy(1,1);
		switch(i){
		case 0:menugen();break;
		case 1:menurest();break;
		case 2:menuoption();break;
		case 3:affaide();break;
		case 4:affmess("Voulez-Vous Vraiment Quitter Ce Programme ?(o/n) : ",14,0);int c=getch();
			  if(c!='o' && c!='O'){
			   effmess();noactbgcolor();gotoxy(x,yd);cprintf("%s",Tab[i]);
			   break;};
			  textcolor(15);textbackground(0);clrscr();return;
		   };
		  break;
	 };
   };
 };

//Fin des Menus

char *makesrcfile(void){ // Cette fonction reconstitue le fichier source (Gros fichier)
  if(ordisrc[0]!='\0'){strcpy(Tempsrc,"//"); strcat(Tempsrc,ordisrc);}
   else strcpy(Tempsrc,"c:");
  if(dirsrc[0]!='\0'){strcat(Tempsrc,"/");strcat(Tempsrc,dirsrc);}
  strcpy(Tempdir,Tempsrc);
  strcat(Tempsrc,"/");strcat(Tempsrc,inputfile);
  return Tempsrc;
 };

char *makedestfile(char *dest){ // Cette fonction crée le nom du premier des petits fichiers (nbfile=1)
  nbfile=1;dest[0]='\0';
  if(ordidest[0]!='\0'){strcpy(Tempmdf,"//");strcat(Tempmdf,ordidest);}
   else strcpy(Tempmdf,"c:");
  if(dirdest[0]!='\0'){strcat(Tempmdf,"/");strcat(Tempmdf,dirdest);}
  char temp[13],input[201],ext[10];retext(inputfile,input,ext);
  ncopy(input,temp,4);strcat(temp,"0");addext(temp,"wct");
  strcpy(dest,Tempmdf); strcat(dest,"/");strcat(dest,temp);
  return dest;
 };

char *makendestfile(char *dest){ // Cette fonction crée les autres noms des petits fichiers (nbfile++)
  nbfile++; char temp[13],tmp[5],input[201],ext[10];retext(inputfile,input,ext);
  ncopy(input,temp,4);strcat(temp,itoa(nbfile-1,tmp,10));addext(temp,"wct");
  strcpy(dest,Tempmdf); strcat(dest,"\\");strcat(dest,temp);
  return dest;
 };

int makewctlst(void){ // Cette Fonction crée le fichier .lst. Ce fichier contient la liste des petits fichiers ainsi que le nom original du fichier.
  //D'autres informations pourront être ajoutées à ce fichier
  char repdest[101],tmp1[5],mess[111],tmp2[13],tp[6],input[31],ext[11];
  FILE *destfile;int i=0;
  strcpy(repdest,Tempmdf);strcat(repdest,"/");strcat(repdest,"wct.lst");
  destfile=fopen(repdest,"w");
  if(!destfile){error("Impossible De Cr?er WCT.LST","Op?ration Annul?e");perror("\n");return 0;}
  retext(inputfile,input,ext);ncopy(input,tmp1,4);
  strcpy(mess,"-- Attention !! Ce Fichier Ne Doit Jamais etre Modifie --");fprintf(destfile,"%s\n",mess);
  strcpy(mess,O_COPY);fprintf(destfile,"%s\n",mess);
  strcpy(mess,"Taille=");strcat(mess,itoa(Taille,tmp2,10));fprintf(destfile,"%s Ko\n",mess);
  strcpy(mess,"Fichier Source=");strcat(mess,inputfile);fprintf(destfile,"%s\n",mess);
  while(i<nbfile){
    strcpy(mess,"Fichier");strcat(mess,itoa(i,tp,10));strcat(mess,"=");
    strcpy(tmp2,tmp1);strcat(tmp2,itoa(i,tp,10));addext(tmp2,"wct");
    strcat(mess,tmp2);fprintf(destfile,"%s\n",mess);
    i++;
   };
  strcpy(mess,"Wincut est un programme Libre d'utilisation ...");
  fprintf(destfile,"\n%s\n",mess);
  strcpy(mess,"Contact : oliviermbieleu@yahoo.fr");
  fprintf(destfile,"\n%s\n",mess);
  fclose(destfile);
  return 1;
 };

int filecopy(int src,int dest,int n){ //Cette fonction copie n*BUFSIZE octets du fichier source vers le fichier destination
  unsigned i=0,nread=1,nwrite=1;
  char buf[BUFSIZE];
  while(i<n && nread>0){
   if (_dos_read(src, buf, BUFSIZE, &nread) != 0){error("Copie De Fichier","Erreur Lors De La Lecture Du Fichier");perror("\n");return 0;}
   if(_dos_write(dest, buf, nread, &nwrite) != 0){error("Copie De Fichier","Erreur Lors De L'?criture Dans Le Fichier");perror("\n");return 0;}
   i++;
   };
  return 1;
 };

int creatfiles(int srcfile){ // Cette fonction crée les petits fichiers. C'est elle qui est appelé par la fonction genetverif
  int destfile;
  char dfile[201],mes[]=" Cr?ation De ",mes1[251];
  FILE *fp;
  makedestfile(dfile);
  while(!(eof(srcfile))){
    strcpy(mes1,mes);strcat(mes1,dfile);
    affmess(mes1,15,1);
    fp=fopen(dfile,"w");fclose(fp);
    if(_dos_open(dfile, O_WRONLY, &destfile)!=0){error("Impossible De Cr?er Les Fichiers R?sultats","");perror("\n");return 0;};
    if(!filecopy(srcfile,destfile,Taille)) return 0;
    _dos_close(destfile);
    if(!(eof(srcfile))) makendestfile(dfile);
    effmess();
   };
  makewctlst(); // Création du fichier wct.lst
  return 1;
 };

char *decoupe(char *src,char car,char *s2){ // Cette fonction coupe une chaine de caractere en deux à partir du caractere car
  s2[0]='\0';if(!src[0]) return "";
  for(int i=0;i<strlen(src) && car!=src[i];i++);
  ncopy(src+i+1,s2,100);
  cutspace(s2);
  return s2;
 };

int restorefile(void){ // Cette fonction reconstitue le gros fichier à partir des petits
  char tmplst[201],tmp1[201],temp1src[201],temp2dest[201],temp3[11],moi[201];
  FILE *fp;
  strcpy(tmplst,Tempdir);strcat(tmplst,"/wct.lst");
  fp=fopen(tmplst,"r");
  if(!fp){error("Impossible D'ouvrir Le Fichier 'WCT.LST'","Op?ration Abandonn?e");return 0;};
  fgets(tmp1,200,fp);
  fgets(tmp1,200,fp);tmp1[strlen(tmp1)-1]='\0';
  if(strcmp(tmp1,O_COPY)){error("Le Fichier WCT.LST Est Corrompu","Op?ration Abandonn?e");return 0;};
  fgets(tmp1,200,fp);
  fgets(tmp1,200,fp);tmp1[strlen(tmp1)-1]='\0';decoupe(tmp1,'=',inputfile);

  if(ordidest[0]!='\0'){strcpy(temp2dest,"//");strcat(temp2dest,ordidest);}
   else strcpy(temp2dest,"c:");
  if(dirdest[0]!='\0'){strcat(temp2dest,"/");strcat(temp2dest,dirdest);}
  strcat(temp2dest,"/");strcat(temp2dest,inputfile); //Fichier Destination

  if(ordisrc[0]!='\0'){strcpy(temp1src,"//");strcat(temp1src,ordisrc);}
   else strcpy(temp1src,"c:"); //Fichiers Sources
  if(dirsrc[0]!='\0'){strcat(temp1src,"/");strcat(temp1src,dirsrc);}

  FILE *fp1=fopen(temp2dest,"w");fclose(fp1);
  int destfile, srcfile;
  char oli1[70]="Reg?n?ration de ",oli2[70];
  strcat(oli1,inputfile);strcat(oli1," A Partir De ");strcpy(oli2,oli1);
  if(_dos_open(temp2dest, O_WRONLY, &destfile)!=0){error("Impossible de Cr?er",temp2dest);perror("\nOlivier");return 0;};
  do{
   fgets(tmp1,200,fp);tmp1[strlen(tmp1)-1]='\0';decoupe(tmp1,'=',temp3);
   if(strlen(temp3)>3){
     strcpy(moi,temp1src);strcat(temp1src,"/");strcat(temp1src,temp3);
     if(_dos_open(temp1src,O_RDONLY,&srcfile)!=0){error("Impossible D'ouvrir Le Fichier Source","");perror("\nOlivier");return 0;};
     strcat(oli1,temp3);
     affmess(oli1,15,1);strcpy(oli1,oli2);
     if(!filecopy(srcfile,destfile,32000)) return 0;
     _dos_close(srcfile);if(filesupp)remove(temp1src);
     strcpy(temp1src,moi);
     effmess();
    };
  }while(strlen(temp3)>3);
 _dos_close(destfile);fclose(fp);if(filesupp)remove(tmplst);
 return 1;
 };

void main(void){
  textmode(C80);
  clrscr();
  mainmenu();
  clrscr();
 };

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.