1

J'ai commencé un petit utilitaire en C avec DevC++ qui permet de diviser une fichier en plusieurs morceaux et puis de les assembler pour obtenir le fichier de départ.
Pour l'instant ça marche avec beaucoup de formats sauf les .bmp : le programme plante et le fichier qui est censé être reconstitué est vide.
Si je veux que mon programme puissent reconstituer le fichier de départ correctement, il y a un truc spécial à faire ? Enfin il n'y a peut-être pas que les .bmp qui ne marche pas... mais avec les .zip, .exe, .txt par ex, ça marche parfaitement.
www.wikio.fr/user1921&info=comments

2

-

3

Non, non. Il y a aussi les gif qui foirent encore pire. J'ai déjà essayer avec un fichier .zip qui fait 650 Mo et je n'ai pas eu de pb.
Mais c'est peut-être Windows qui vide le fichier. Par ex, quand on modifie un .bmp en l'ouvrant avcec un éditeur de texte, et bien à tout les coups en fermant le fichier on s'aperçoit qu'il y a plus rien dedans.
J'ai aussi commencé à programmer un programme qui cache du texxte à la fin d'un fichier et ça marche avec tout les format sauf les gifs (enfin les gifs animés déjà).
www.wikio.fr/user1921&info=comments

4

-

5

Code sous la licence BSD (g la flemme de copier/coller la licence)

Edit: Pour la forme j'ai mis la licence :

/*
Copyright (c) 2003, Godzil aka TRAPIER Manoël
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 
Neither the name of 986 Corporation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

#define usage() { fprintf(stderr,	"usage : spliter s size file basename\n        spliter u basename file\nwhere :\n\t\t s : split a file\n\t\t u : unsplit a file\n\t\t size : Size of splited file in bytes\n\t\t file : for s file to split, for u file where to save\n\t\t basename : The basename for splited files (ie : MySplittedfile)\t\t            Don't put an extention !\n\n"); }

unsigned long GetFileSize(FILE *fp)
{
	unsigned long inSize;
	unsigned long pos;
	pos = ftell(fp);
	fseek(fp,0,SEEK_END);
	inSize = ftell(fp);
	fseek(fp,pos,SEEK_SET);
	return inSize;
}

#define KILO  (1024)
#define MEGA  (1024 * 1024)
#define GIGA  (1024 * 1024 * 1024)

char *SaySize(unsigned long Size)
{
	static char buffer[100];

	double size = Size;

	memset(buffer,0,100);

	if ( ( size / GIGA ) >= 1.0 )
	{
		sprintf(buffer,"%4.3f Go", size / GIGA );
	}
	else if ( ( size / MEGA ) >= 1.0 )
	{
		sprintf(buffer,"%4.3f Mo", size / MEGA );
	}
	else if ( ( size / KILO ) >= 1.0 )
	{
		sprintf(buffer,"%4.3f Ko", size / KILO );
	}
	else /* Octet */
	{
		sprintf(buffer,"%4.3f Octet(s)", size );
	}

	return buffer;
}

void unsplitter(char *basename, char *filename)
{
	FILE *sfp;
	FILE *dfp;
	
	char buff[20];
	char NameBuffer[1024];
	
	int finish;

	unsigned long fNum;

	if( (dfp = fopen(filename,"wb")) == NULL)
	{
		fprintf(stderr,"Error opening %s !\n",filename);
		exit(-1);
	}

	printf("Unsplit %s.xxxxx.splt to %s....\nThis may take time...\n",basename,filename);

	fNum = 0;
	sprintf(NameBuffer,"%s.%0.5d.splt",basename,fNum);
	putchar('\n');
	putchar('-');
	if( (sfp = fopen(NameBuffer,"rb")) == NULL)
	{
		fprintf(stderr,"Error opening %s !\n",filename);
		exit(-1);
	}

	finish = 0;

	while(finish == 0)
	{
		while(fread(buff,1,1,sfp) != 0)
		{
			fwrite(buff,1,1,dfp);
		}
		putchar('-');
		fNum++;
		sprintf(NameBuffer,"%s.%0.5d.splt",basename,fNum);
		if( (sfp = fopen(NameBuffer,"rb")) == NULL)
		{
			finish = 1;
		}	
	}
	fclose(dfp);
	printf("Finished !\n");

}

void splitter(unsigned long size, char *filename, char *basename)
{
	FILE *sfp;
	FILE *dfp;
	
	char buff[20];
	char NameBuffer[1024];
	
	unsigned long fSize;
	unsigned long fNum;
	unsigned long pos;

	if( (sfp = fopen(filename,"rb")) == NULL)
	{
		fprintf(stderr,"Error opening %s !\n",filename);
		exit(-1);
	}
	
	fSize = GetFileSize(sfp);

	printf("%s is %s\n",filename,SaySize(fSize));
	printf("Will split approximativly in %d file(s) of %s",fSize/size,SaySize(size));

	pos = 0;
	fNum = 0;
	sprintf(NameBuffer,"%s.%0.5d.splt",basename,fNum);
	putchar('\n');
	putchar('-');
	if( (dfp = fopen(NameBuffer,"wb")) == NULL)
	{
		fprintf(stderr,"Error opening %s !\n",filename);
		exit(-1);
	}
	while(!feof(sfp))
	{
		if (pos >= size)
		{
			pos = 0;
			fNum++;
			sprintf(NameBuffer,"%s.%0.5d.splt",basename,fNum);
			putchar('-');
			fclose(dfp);
			if( (dfp = fopen(NameBuffer,"wb")) == NULL)
			{
				fprintf(stderr,"Error opening %s !\n",filename);
				exit(-1);
			}
		}
		if ( fread(buff,1,1,sfp) != 0 )
			fwrite(buff,1,1,dfp);
		pos ++;
	}
	fclose(dfp);
	fclose(sfp);
	printf("Finished !\n");
}

int main(int argc, char *argv[])
{


	if ( ( argc !=4 ) && ( argc !=5 ) )
	{
		usage();
		exit(-1);
	}

	if ( argv[1][0] == 's' )
	{ /* Split the file */
		/*
		exe s size file basename
		*/
		splitter(atoi(argv[2]),argv[3],argv[4]);
	}
	else if ( argv[1][0] == 'u' )
	{ /* Unsplit the file */
		/*
		exe u basename file 
		*/
		unsplitter(argv[2],argv[3]);
	}
	else
	{
		usage();
		exit(-1);
	}


}
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

6

Le meme mais avec l'option "source"
/* Copyright (c) 2003, Godzil aka TRAPIER Manoël All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.  Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.  Neither the name of 986 Corporation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <stdio.h> #include <stdlib.h> #include <memory.h> #define usage() { fprintf(stderr,     "usage : spliter s size file basename\n        spliter u basename file\nwhere :\n\t\t s : split a file\n\t\t u : unsplit a file\n\t\t size : Size of splited file in bytes\n\t\t file : for s file to split, for u file where to save\n\t\t basename : The basename for splited files (ie : MySplittedfile)\t\t            Don't put an extention !\n\n"); } unsigned long GetFileSize(FILE *fp) {      unsigned long inSize;      unsigned long pos;      pos = ftell(fp);      fseek(fp,0,SEEK_END);      inSize = ftell(fp);      fseek(fp,pos,SEEK_SET);      return inSize; } #define KILO  (1024) #define MEGA  (1024 * 1024) #define GIGA  (1024 * 1024 * 1024) char *SaySize(unsigned long Size) {      static char buffer[100];      double size = Size;      memset(buffer,0,100);      if ( ( size / GIGA ) >= 1.0 )      {           sprintf(buffer,"%4.3f Go", size / GIGA );      }      else if ( ( size / MEGA ) >= 1.0 )      {           sprintf(buffer,"%4.3f Mo", size / MEGA );      }      else if ( ( size / KILO ) >= 1.0 )      {           sprintf(buffer,"%4.3f Ko", size / KILO );      }      else /* Octet */      {           sprintf(buffer,"%4.3f Octet(s)", size );      }      return buffer; } void unsplitter(char *basename, char *filename) {      FILE *sfp;      FILE *dfp;            char buff[20];      char NameBuffer[1024];            int finish;      unsigned long fNum;      if( (dfp = fopen(filename,"wb")) == NULL)      {           fprintf(stderr,"Error opening %s !\n",filename);           exit(-1);      }      printf("Unsplit %s.xxxxx.splt to %s....\nThis may take time...\n",basename,filename);      fNum = 0;      sprintf(NameBuffer,"%s.%0.5d.splt",basename,fNum);      putchar('\n');      putchar('-');      if( (sfp = fopen(NameBuffer,"rb")) == NULL)      {           fprintf(stderr,"Error opening %s !\n",filename);           exit(-1);      }      finish = 0;      while(finish == 0)      {           while(fread(buff,1,1,sfp) != 0)           {                fwrite(buff,1,1,dfp);           }           putchar('-');           fNum++;           sprintf(NameBuffer,"%s.%0.5d.splt",basename,fNum);           if( (sfp = fopen(NameBuffer,"rb")) == NULL)           {                finish = 1;           }           }      fclose(dfp);      printf("Finished !\n"); } void splitter(unsigned long size, char *filename, char *basename) {      FILE *sfp;      FILE *dfp;            char buff[20];      char NameBuffer[1024];            unsigned long fSize;      unsigned long fNum;      unsigned long pos;      if( (sfp = fopen(filename,"rb")) == NULL)      {           fprintf(stderr,"Error opening %s !\n",filename);           exit(-1);      }            fSize = GetFileSize(sfp);      printf("%s is %s\n",filename,SaySize(fSize));      printf("Will split approximativly in %d file(s) of %s",fSize/size,SaySize(size));      pos = 0;      fNum = 0;      sprintf(NameBuffer,"%s.%0.5d.splt",basename,fNum);      putchar('\n');      putchar('-');      if( (dfp = fopen(NameBuffer,"wb")) == NULL)      {           fprintf(stderr,"Error opening %s !\n",filename);           exit(-1);      }      while(!feof(sfp))      {           if (pos >= size)           {                pos = 0;                fNum++;                sprintf(NameBuffer,"%s.%0.5d.splt",basename,fNum);                putchar('-');                fclose(dfp);                if( (dfp = fopen(NameBuffer,"wb")) == NULL)                {                     fprintf(stderr,"Error opening %s !\n",filename);                     exit(-1);                }           }           if ( fread(buff,1,1,sfp) != 0 )                fwrite(buff,1,1,dfp);           pos ++;      }      fclose(dfp);      fclose(sfp);      printf("Finished !\n"); } int main(int argc, char *argv[]) {      if ( ( argc !=4 ) && ( argc !=5 ) )      {           usage();           exit(-1);      }      if ( argv[1][0] == 's' )      { /* Split the file */           /*           exe s size file basename           */           splitter(atoi(argv[2]),argv[3],argv[4]);      }      else if ( argv[1][0] == 'u' )      { /* Unsplit the file */           /*           exe u basename file            */           unsplitter(argv[2],argv[3]);      }      else      {           usage();           exit(-1);      } }
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

7

Ok, merci bien pr le code.
Sinon, ma routine ne foire pas parce-que comme tu l'as dit ça marche parfaitement pour certain format.
Par contre, les gifs animés on ne peut même pas les ouvrir ! Je ne sais pas de quoi ça vient. Bon pas c'est pas grave : il suffira de tout mettre sous zip pour que ça marche ! grin
www.wikio.fr/user1921&info=comments

8

Perso j'ai testé mon programme avec une video de 300 Mo coupé en morceau de 1Mo et sa marche tres bien happy
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

9

Oui, moi aussi ça marche avec les mpeg et même les wav. Mais par ex les gifs fait avec VTI ça ne marche pas. sad
C'est pas un problème de taille en fait.
www.wikio.fr/user1921&info=comments

10

Et au fait ton programme tu l'as programmé pourquoi faire ? Moi au départ c'était pour faire passer TIGCC sur un autre ordi par disquette parce-qu'il ne lit pas les RW et qu'il n'y a pas de connexion Internet.
Et sinon tu connais des programme PC qui font la même chose ?
Depuis pas longtemps je sais qu'il y a Winzip mais on ne peux pas choisir la taille des fichiers "découpés".
www.wikio.fr/user1921&info=comments

11

heuuuuuu je l'ai fait en 1/4 chrono en voyant ton topic grin (sisi c'est vrai grin)

Ben mon prog c un programme pc ta qua le compiler et sa marche happy

Rajouter une compression.... HUmm sa pourraitre une bonne id a ajouter happy

A voir smile

Nan tu peut utiliser directement mon programme si tu veux, c fait pour smile
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

12

-

13

Tu l'as compilé avec quoi ? Avec DevC++ c'est bon mais par contre je n'arrive pas à le faire marcher : la fenêtre apparait et puis plus rien.
www.wikio.fr/user1921&info=comments

14

normal il fuat l'utiliser sur la ligne de commande neutral

Je l'ai compile avec mscv (j'aime pas DevC...) et g une version free de msvc tongue

grin

Orion_> sa viens d'ou ? de toi ?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

15

Ah ouais !... Il est pas mal ton programme Orion_ ! smile J'aimerais bien maîtriser la programmation Windows comme ça ! smile Mais le C++, et la prog Windows me rebute un peu. sad
Finalement il y a pas mal de monde qui à l'air d'avoir programmer ça.
Ah, ouais au fait je ne me suis même pas poser la question de savoir si il était de toi.
www.wikio.fr/user1921&info=comments

16

Si tu veux d'ici la semaine prochaine (la mon "taf" de prog est au complet.. g po le temps) une version windows sera faire cheeky
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

17

g une version free de msvc
Tu as bien de la chance. smile Moi je fais avec DevC++, c'est tjrs mieux que rien.
www.wikio.fr/user1921&info=comments

18

-

19

Orion_ a écrit :
regarde bien, y'a marqué koi en haut ? grin WhiteSoft c surement pas moi smile

Ok, j'avais pas fait gaffe dehors
prend Borland C++ ou Delphi, car pour la programmation windows c les compilo les plus simple. tu fait une form avec bouton, label et plein d'autre truc windows en 2 min chrono
ensuite tu double click juste sur les composant pour leurs affecter du code et voila
c vraiment trop simple.
bon parcontre c absolument pas adapter au graphisme par exemple si tu veut faire de l'opengl, la vaut mieux VC++ smile


Hum avec msvc en 2minutes chorno je te fait une forme avec boutons, label et plein d'autres trucs cheeky
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

20

-

21

de la meme facon qu'avec Borland je suppose smile
(jamais utilisé borland, mais pour une interface fenetrée, MSVC fait ça de façon tout à fait correcte smile)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

22

prend Borland C++ ou Delphi, car pour la programmation windows c les compilo les plus simple.tu fait une form avec bouton, label et plein d'autre truc windows en 2 min chrono
ensuite tu double click juste sur les composant pour leurs affecter du code et voila c vraiment trop simple.

Ouais, mais ça ce n'est pas de la programmation, c'est de l'édition ! grin
De toute façon pour la programmation Windows, ça ne vaut pas tellement le coup de taper du code.
bon parcontre c absolument pas adapter au graphisme par exemple si tu veut faire de l'opengl, la vaut mieux VC++

Pourquoi VC++ ?
De toute façon je n'arrive déjà pas à me servir d'une lib sur PC (sauf openGL qui est déjà avec DevC++) mais c'est assez chaud à programmer je trouve.





www.wikio.fr/user1921&info=comments

23

allegro sous MSVC++ g pas eu de probleme majeur, ma foi...
une demi journée, que j'ai du y passer, en comptant les temps de téléchargement, de compilation des sources de allegro, la recherche de docs et tout...
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

24

Z'auriez pas du vous embêter d-koup fait ca très bien:
http://b.berteau.free.fr/dk.php
Aussi inutile que le H d'Hawaï

25

J'veux pas faire le rabat joie, mais moi, je cherche ce qui existe déjà avant de faire du code tongue
et splitter/compresser, winrar le fait super bien (et meme en autodécompactable tongue)

c'était la parole d'un fégneiant smile smile smile

26

c'est sur que c'est comme sa que tu apprendra a programmer triso
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

27

ouais, c super de réiventer la roue!

code des trucs utiles au moins.
Aussi inutile que le H d'Hawaï