begin process at 2010 02 10 12:26:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > DECOUPEUR/RECOLLEUR DE FICHIER [DJGPP]

DECOUPEUR/RECOLLEUR DE FICHIER [DJGPP]


 Information sur la source

Note :
Aucune note
Catégorie :Fichiers / Disque Niveau :Initié Date de création :06/12/2002 Date de mise à jour :06/12/2002 18:26:40 Vu / téléchargé :3 383 / 111

Auteur : gorgonzola

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voila un prog que j'ai fait il y a deja quelques temps mais que je n'ai jamais mis sur le site
Je ne lui ai pas fait d'interface graphique  

Source

  • #include <sys/stat.h>
  • #include <string.h>
  • #include <unistd.h>
  • #include <stdio.h>
  • #include <conio.h>
  • #include <fcntl.h>
  • #include <ctype.h>
  • #include <io.h>
  • #define Ko(x) ((x)<<10)
  • #define Mo(x) (Ko(x)<<10)
  • #define HEADER 256
  • void Xslice(int argc,char **argv);
  • int stickSLI(char *header,char *name);
  • int createSLI(int file,long s,char *path,char *header);
  • int readArg(int *pF,int *pN,long *s,int argc,char **argv);
  • int getPieces(long filesize,long piecesize);
  • int main(int argc,char **argv)
  • {
  • if (argc>1) Xslice(argc,argv);
  • else printf( "\n"
  • "Utilisation :\n"
  • "\n"
  • "%s fichier [parametres]\n"
  • "\n"
  • "parametres :\n"
  • "\n"
  • "-o choisir le nom du fichier SLI genere\n"
  • "-s choisir la taille des morceaux (en Ko, et en Mo si 'm' est ecris a la fin)\n"
  • "-n choisir le nombre de morceaux\n"
  • "\n"
  • "Exemples :\n"
  • "\n"
  • "%s fichier.zip -n 2 -o truc\n"
  • " fichier.zip est coupe en 2 morceaux ki s'appeleront truc00000.sli et truc00001.sli\n"
  • "\n"
  • "%s truc.htm -s 1m\n"
  • " truc.htm est coupe en morceaux de 1 Mo qui s'appeleront truc_htmXXXXX.sli\n",argv[0],argv[0],argv[0]);
  • return 0;
  • }
  • void Xslice(int argc,char **argv)
  • {
  • int i;
  • int i2;
  • int file;
  • int var;
  • int placeFile;
  • int placeName;
  • char header[HEADER];
  • char *path=NULL;
  • long size;
  • printf("\n");
  • var=readArg(&placeFile,&placeName,&size,argc,argv);
  • if ((size<0)&&(placeFile))
  • {
  • file=open(argv[placeFile],O_BINARY,O_RDONLY);
  • _read(file,header,256);
  • close(file);
  • if ((header[0]!='S')||(header[1]!='L')||(header[2]!='I')) printf("Ce fichier n'est pas un fichier SLI, ou est corrompu ou inexistant.\n");
  • else
  • {
  • printf( "fichier d'origine : %s\n"
  • "nombre de morceaux : %d\n",header+4,(header[54]<<8)+header[55]);
  • path=new char[strlen(argv[placeFile])];
  • i=-1;
  • while (argv[placeFile][++i]) path[i]=argv[placeFile][i];
  • path[i]=0;
  • path[i-5]='0';
  • path[i-6]='0';
  • path[i-7]='0';
  • path[i-8]='0';
  • path[i-9]='0';
  • stickSLI(header,path);
  • delete [] path;
  • }
  • }
  • else if (placeFile)
  • {
  • file=open(argv[placeFile],O_BINARY,O_RDONLY);
  • if ((file==-1)||(!size))
  • {
  • close(file);
  • printf( "Impossible de couper le fichier %s\n",argv[placeFile]);
  • if (file==-1) printf("Fichier corrompu ou inexistant.\n");
  • else printf("Taille incorrecte ou non precisee\n");
  • }
  • else
  • {
  • if (var)
  • {
  • var=size;
  • size=filelength(file)/var;
  • size+=filelength(file)-(var*size);
  • }
  • else size=(size<<10)-HEADER;
  • i=strlen(argv[placeFile]);
  • path=new char[i+1];
  • while ((argv[placeFile][i]!='\\')&&(argv[placeFile][i]!='/')&&(i>=0)) i--;
  • for (i2=0 ; argv[placeFile][++i] ; i2++) path[i2]=argv[placeFile][i];
  • path[i2]=0;
  • for (i=0 ; i<HEADER ; i++) header[i]=0;
  • /* 0 octets de reconnaissance 3 */
  • sprintf(header,"SLI");
  • /* 3 version du format 1 */
  • sprintf(header+3,"%c",1);
  • /* 4 fichier d'origine 50 */
  • sprintf(header+4,"%s",path);
  • sprintf(header+53,"%c",0);
  • /* 54 nombre de morceaux 2 */
  • sprintf(header+54,"%c%c",getPieces(filelength(file),size)&0xFF00,getPieces(filelength(file),size)&0x00FF);
  • /* 56 numero de morceau 2 */
  • /* 58 reserve 6 */
  • /* 64 commentaires 192 */
  • sprintf(header+64,"- morceau de fichier cree par X-Slice v1.0 - par Boes Olivier- derniere compilation le "__DATE__" a "__TIME__" - http://www.gorgonzola.be.tf - boesolivier@hotmail.com -");
  • delete [] path;
  • i=0;
  • if (placeName)
  • {
  • path=new char[strlen(argv[placeName])+strlen(argv[placeFile])+10];
  • while (argv[placeName][i]) path[i]=argv[placeName][i++];
  • }
  • else path=new char[strlen(argv[placeFile])+20];
  • if ((!placeName)||(((path[i-1]=='\\')||(path[i-1]=='/'))&&(placeName))) for (i2=0 ; argv[placeFile][i2] ; i2++) path[i++]=((argv[placeFile][i2]=='.')?'_':argv[placeFile][i2]);
  • sprintf(path+i,"00000.sli");
  • if ((size+(var?HEADER:0))<filelength(file))
  • {
  • var=createSLI(file,size,path,header);
  • printf("\n%s a ete coupe en %d morceaux de %ld Ko avec succes !\n",argv[placeFile],var,size>>10);
  • }
  • else printf("Inutile de couper le fichier en un seul morceau !\n");
  • delete [] path;
  • close(file);
  • }
  • }
  • }
  • int stickSLI(char *header,char *name)
  • {
  • int i;
  • int i2;
  • int posNum=strlen(name)-5;
  • int nf=(header[54]<<8)+header[55];
  • int file;
  • int sf;
  • long len;
  • char *str=NULL;
  • i=0;
  • sf=creat(header+4,S_IRUSR|S_IWUSR);
  • file=open(name,O_BINARY,O_RDONLY);
  • len=filelength(file);
  • str=new char[len];
  • len-=256;
  • close(file);
  • while (i<nf)
  • {
  • file=open(name,O_BINARY,O_RDONLY);
  • i2=0;
  • printf("rattachement de %s... \n",name);
  • while ((++name[posNum-i2])==':')
  • {
  • name[posNum-i2]='0';
  • i2++;
  • }
  • _read(file,str,256);
  • len=_read(file,str,len);
  • _write(sf,str,len);
  • close(file);
  • i++;
  • }
  • close(sf);
  • delete [] str;
  • return 0;
  • }
  • int createSLI(int file,long s,char *path,char *header)
  • {
  • int i;
  • int i2;
  • int SLIfile;
  • int posNum=strlen(path)-5;
  • long sz=s;
  • char *str=NULL;
  • str=new char[sz+1];
  • i=filelength(file);
  • while (i>0)
  • {
  • printf("creation de %s...\n",path);
  • SLIfile=creat(path,S_IRUSR|S_IWUSR);
  • i2=0;
  • while ((++path[posNum-i2])==':')
  • {
  • path[posNum-i2]='0';
  • i2++;
  • }
  • sz=_read(file,str,sz);
  • _write(SLIfile,header,HEADER);
  • _write(SLIfile,str,sz);
  • close(SLIfile);
  • i-=sz;
  • header[57]++;
  • if (!header[57]) header[56]++;
  • }
  • delete [] str;
  • return (header[56]<<8)+header[57];
  • }
  • int readArg(int *pF,int *pN,long *s,int argc,char **argv)
  • {
  • int i;
  • int i2;
  • int n=0;
  • *pF=0;
  • *pN=0;
  • *s=-1;
  • for (i=1 ; i<argc ; i++)
  • {
  • if (argv[i][0]=='-')
  • {
  • if ((i+1)<argc)
  • {
  • if (argv[i][1]=='o') *pN=++i;
  • else if ((argv[i][1]=='s')||(argv[i][1]=='n'))
  • {
  • i++;
  • *s=0;
  • i2=0;
  • if (argv[i-1][1]=='s') n=0;
  • else n=1;
  • while ((argv[i][i2]<='9')&&(argv[i][i2]>='0'))
  • {
  • (*s)*=10;
  • (*s)+=argv[i][i2++]-'0';
  • }
  • if ((argv[i][i2]=='m')||(argv[i][i2]=='M')) (*s)<<=10;
  • }
  • }
  • }
  • else if (!(*pF)) *pF=i;
  • }
  • return n;
  • }
  • int getPieces(long filesize,long piecesize)
  • {
  • int i=0;
  • long f=filesize;
  • long s=piecesize;
  • while (f>0)
  • {
  • if (s>f) s=f;
  • f-=s;
  • i++;
  • }
  • return i;
  • }
#include				<sys/stat.h>
#include				<string.h>
#include				<unistd.h>
#include				<stdio.h>
#include				<conio.h>
#include				<fcntl.h>
#include				<ctype.h>
#include				<io.h>

#define					Ko(x)		((x)<<10)
#define					Mo(x)		(Ko(x)<<10)
#define					HEADER		256

void					Xslice(int argc,char **argv);
int					stickSLI(char *header,char *name);
int					createSLI(int file,long s,char *path,char *header);
int					readArg(int *pF,int *pN,long *s,int argc,char **argv);
int					getPieces(long filesize,long piecesize);

int					main(int argc,char **argv)
{
	if (argc>1) Xslice(argc,argv);
	else printf(	"\n"
			"Utilisation :\n"
			"\n"
			"%s fichier [parametres]\n"
			"\n"
			"parametres :\n"
			"\n"
			"-o   choisir le nom du fichier SLI genere\n"
			"-s   choisir la taille des morceaux (en Ko, et en Mo si 'm' est ecris a la fin)\n"
			"-n   choisir le nombre de morceaux\n"
			"\n"
			"Exemples :\n"
			"\n"
			"%s fichier.zip -n 2 -o truc\n"
			"  fichier.zip est coupe en 2 morceaux ki s'appeleront truc00000.sli et truc00001.sli\n"
			"\n"
			"%s truc.htm -s 1m\n"
			"  truc.htm est coupe en morceaux de 1 Mo qui s'appeleront truc_htmXXXXX.sli\n",argv[0],argv[0],argv[0]);
			
			
			
	return 0;
}

void					Xslice(int argc,char **argv)
{
	int				i;
	int				i2;
	int				file;
	int				var;
	int				placeFile;
	int				placeName;
	char				header[HEADER];
	char				*path=NULL;
	long				size;

	printf("\n");
	var=readArg(&placeFile,&placeName,&size,argc,argv);
	if ((size<0)&&(placeFile))
	{
		file=open(argv[placeFile],O_BINARY,O_RDONLY);
		_read(file,header,256);
		close(file);
		if ((header[0]!='S')||(header[1]!='L')||(header[2]!='I')) printf("Ce fichier n'est pas un fichier SLI, ou est corrompu ou inexistant.\n");
		else
		{
			printf(	"fichier d'origine :    %s\n"
				"nombre de morceaux :   %d\n",header+4,(header[54]<<8)+header[55]);
			path=new char[strlen(argv[placeFile])];
			i=-1;
			while (argv[placeFile][++i]) path[i]=argv[placeFile][i];
			path[i]=0;
			path[i-5]='0';
			path[i-6]='0';
			path[i-7]='0';
			path[i-8]='0';
			path[i-9]='0';
			stickSLI(header,path);
			delete [] path;
		}
	}
	else if (placeFile)
	{
 		file=open(argv[placeFile],O_BINARY,O_RDONLY);
		if ((file==-1)||(!size))
		{
			close(file);
			printf(	"Impossible de couper le fichier %s\n",argv[placeFile]);
			if (file==-1)	printf("Fichier corrompu ou inexistant.\n");
			else		printf("Taille incorrecte ou non precisee\n");
		}
		else 
		{
			if (var) 
			{
				var=size;
				size=filelength(file)/var;
				size+=filelength(file)-(var*size);
			}
			else size=(size<<10)-HEADER;
			i=strlen(argv[placeFile]);
			path=new char[i+1];
			while ((argv[placeFile][i]!='\\')&&(argv[placeFile][i]!='/')&&(i>=0)) i--;		
			for (i2=0 ; argv[placeFile][++i] ; i2++) path[i2]=argv[placeFile][i];
			path[i2]=0;
			for (i=0 ; i<HEADER ; i++) header[i]=0;

				/*	0	octets de reconnaissance	3	*/
			sprintf(header,"SLI");

				/*	3	version du format		1	*/
			sprintf(header+3,"%c",1);

				/*	4	fichier d'origine		50	*/
			sprintf(header+4,"%s",path);
			sprintf(header+53,"%c",0);

				/*	54	nombre de morceaux		2	*/			
			sprintf(header+54,"%c%c",getPieces(filelength(file),size)&0xFF00,getPieces(filelength(file),size)&0x00FF);

				/*	56	numero de morceau		2	*/		

				/*	58	reserve				6	*/

				/*	64	commentaires			192	*/
			sprintf(header+64,"- morceau de fichier cree par X-Slice v1.0 - par Boes Olivier- derniere compilation le "__DATE__" a "__TIME__" - http://www.gorgonzola.be.tf - boesolivier@hotmail.com -");

			delete [] path;
			i=0;
			if (placeName) 
			{
				path=new char[strlen(argv[placeName])+strlen(argv[placeFile])+10];
				while (argv[placeName][i]) path[i]=argv[placeName][i++];
			}
			else path=new char[strlen(argv[placeFile])+20];
			if ((!placeName)||(((path[i-1]=='\\')||(path[i-1]=='/'))&&(placeName))) for (i2=0 ; argv[placeFile][i2] ; i2++) path[i++]=((argv[placeFile][i2]=='.')?'_':argv[placeFile][i2]);
			sprintf(path+i,"00000.sli");	
			if ((size+(var?HEADER:0))<filelength(file)) 
			{
				var=createSLI(file,size,path,header);
				printf("\n%s a ete coupe en %d morceaux de %ld Ko avec succes !\n",argv[placeFile],var,size>>10); 
			}
			else printf("Inutile de couper le fichier en un seul morceau !\n");
			delete [] path;
			close(file);	
		}
	}
}

int					stickSLI(char *header,char *name)
{
	int				i;
	int				i2;
	int				posNum=strlen(name)-5;
	int				nf=(header[54]<<8)+header[55];
	int				file;
	int				sf;
	long				len;
	char				*str=NULL;

	i=0;
	sf=creat(header+4,S_IRUSR|S_IWUSR);
	file=open(name,O_BINARY,O_RDONLY);
	len=filelength(file);
	str=new char[len];
	len-=256;
	close(file);
	while (i<nf)
	{
		file=open(name,O_BINARY,O_RDONLY);
		i2=0;
		printf("rattachement de %s...  \n",name);
		while ((++name[posNum-i2])==':') 
		{
			name[posNum-i2]='0';
			i2++;
		}
		_read(file,str,256);
		len=_read(file,str,len);
		_write(sf,str,len);
		close(file);
		i++;		
	}
	close(sf);
	delete [] str;
	return 0;
}

int					createSLI(int file,long s,char *path,char *header)
{
	int				i;
	int				i2;
	int				SLIfile;
	int				posNum=strlen(path)-5;
	long				sz=s;
	char				*str=NULL;

	str=new char[sz+1];
	i=filelength(file);
	while (i>0)
	{
		printf("creation de %s...\n",path);
		SLIfile=creat(path,S_IRUSR|S_IWUSR);
		i2=0;
		while ((++path[posNum-i2])==':') 
		{
			path[posNum-i2]='0';
			i2++;
		}
		sz=_read(file,str,sz);
		_write(SLIfile,header,HEADER);
		_write(SLIfile,str,sz);
		close(SLIfile);
		i-=sz;
		header[57]++;
		if (!header[57]) header[56]++;	
	} 
	delete [] str;
	return (header[56]<<8)+header[57];	
}

int					readArg(int *pF,int *pN,long *s,int argc,char **argv)
{
	int				i;
	int				i2;
	int				n=0;

	*pF=0;
	*pN=0;
	*s=-1;
	for (i=1 ; i<argc ; i++)
	{
		if (argv[i][0]=='-')
		{
			if ((i+1)<argc)
			{
				if (argv[i][1]=='o') *pN=++i;				
				else if ((argv[i][1]=='s')||(argv[i][1]=='n'))
				{
					i++;
					*s=0;
					i2=0;
					if (argv[i-1][1]=='s') n=0;
					else n=1;
					while ((argv[i][i2]<='9')&&(argv[i][i2]>='0')) 
					{
						(*s)*=10;
						(*s)+=argv[i][i2++]-'0';
					}
					if ((argv[i][i2]=='m')||(argv[i][i2]=='M')) (*s)<<=10;
				}
			}
		}
		else if (!(*pF)) *pF=i;
	}
	return n;
}

int					getPieces(long filesize,long piecesize)
{
	int				i=0;
	long				f=filesize;
	long				s=piecesize;

	while (f>0)
	{
		if (s>f) s=f;
		f-=s;
		i++;
	}
	return i;
}

 


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture RESOLUTION D'EQUATIONS (JUSQU'AU 3EME DEGRE) + CLASSE POUR M...
Source avec Zip DESSINER A LA MAIN UNE STRUCTURE FRACTALE [DJGPP] [VGA 13H]
Source avec Zip JEU DE LA VIE EN MODE VGA 11H [DJGPP]
Source avec Zip Source avec une capture GENERATEUR DE FRACTAL PERSONNALISE [VESA] [DJGPP]
Source avec Zip MODE VESA HAUTE RESOLUTION [DJGPP]

 Sources de la même categorie

Source avec Zip Source avec une capture ID3 TAG COVER ALBUM IMAGE par nanonavich
FILEREADER par FrancoisGauthier
Source avec Zip CLASSE AVANCÉE DE LOG, THREAD SAFE ET DIVERSES SURCHARGES par sboli
Source avec Zip Source avec une capture Source .NET (Dotnet) INFILESEEKER par swonder
Source avec Zip Source avec une capture USB DETECTION par abandonware

Commentaires et avis

Commentaire de lerilcy le 07/01/2003 12:24:56

Ton prog pour decouper et assembler.
Il est bien, simple et efficace.
Mais j'ai un petit probleme: Sur ma machine, il trouve pas
&lt;unistd.h&gt;
et me retourne donc cette erreur:
fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
Aurais tu une solution?
En te remerciant d'avance pour ton aide.

Commentaire de lerilcy le 07/01/2003 12:25:04

Ton prog pour decouper et assembler.
Il est bien, simple et efficace.
Mais j'ai un petit probleme: Sur ma machine, il trouve pas
&lt;unistd.h&gt;
et me retourne donc cette erreur:
fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
Aurais tu une solution?
En te remerciant d'avance pour ton aide.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales