begin process at 2010 02 10 02:52:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Fichier / Disque

 > 

splitter de fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

splitter de fichier

samedi 16 novembre 2002 à 18:10:11 | splitter de fichier

24Karas

salut à tous

En fait je fais un splitter de fichier mais j'ai un probleme. il me rajoute 1 octet sur la découpe et 1 octet par fichier pour la reconstitution.
Je pense que la c dans dans les boucles que je dois merder. pourtant seulement un caractere est rajouté dans la découpe même si il se découpe en 4 fichiers.
Si vous pouvez m'aider ça serait cool
Merci
24.KaraS
--->
G une fenêtre qui possede une textbox pour saisir le nom du fichier à couper ou à coller.
une autre textbox pour saisir la taille de découpe
et 2 checkbox pour savoir si on veux couper ou coller.
Et il y a le bouton (ID_lancer) pour éxécuter.

---->le source

#include <windows.h>
#include <stdlib.h>
#include "resource.h"
#include<stdio.h>

LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
HINSTANCE hInstance_recup; //variable globale pour utiliser hinstance dans
//le traitement des messages


int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hDlg;
hDlg=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)MainProc);
ShowWindow(hDlg,SW_SHOW);
MSG msg;

//récupération de hinstance pour le traitement des messages
hInstance_recup = hInstance;

//gestion des messages
while(GetMessage(&msg,hDlg,0,0)==TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}


LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
{

char chemin[250]= {".\\"}; //chemin du fichier source
char chemin_final[250]= {" "}; //chemin des fichiers à créer
char tailles[10]= {" "}; //nom du film
int taille=0; //conversion de la taille saisie en entier

FILE *source,*destination; //fichier à lire

int num =0; //indice du numero de fichier créé
char tampon[2] = {" "};
int nb=0; //nombre de caracter lu pour chaque fichier
int lu=0; //retour de la fonction fread
char numstr[20] = {" "};
bool fin=false; //variable pour la fin de la reconstitution
int ecrit = 0;

//gestion des messages
int Select;
switch(message)
{
// Saisie du deplacement de la fenetre par un clic continu sur celle ci
case WM_LBUTTONDOWN:
SendMessage(Dlg,WM_NCLBUTTONDOWN, HTCAPTION,0);
break;

//boutons
case WM_COMMAND:
Select=LOWORD(wParam);
switch(Select)
{
//bouton lancer
case IDLANCER:

//rien n'est coché
if ( SendMessage (GetDlgItem (Dlg,ID_COLLER),BM_GETSTATE,0,0) == BST_UNCHECKED
&& SendMessage (GetDlgItem (Dlg,ID_COUPER),BM_GETSTATE,0,0) == BST_UNCHECKED)
{
MessageBox (0,"Veuillez cocher une case","Erreur",0);
break;
}

//tout est coché
if ( SendMessage (GetDlgItem (Dlg,ID_COLLER),BM_GETSTATE,0,0) == BST_CHECKED
&& SendMessage (GetDlgItem (Dlg,ID_COUPER),BM_GETSTATE,0,0) == BST_CHECKED)
{
MessageBox (0,"Veuillez cocher une seule case","Erreur",0);
break;
}

//On coupe ?
if (SendMessage (GetDlgItem (Dlg,ID_COUPER),BM_GETSTATE,0,0) == BST_CHECKED)
{
GetDlgItemText (Dlg,IDC_CHEMIN,chemin,250); //recup chemin
GetDlgItemText (Dlg,IDC_TAILLE,tailles,10); //recup taille
taille = atoi (tailles); //conversion en entier
taille *= 1000; //on met la taille en Ko

//on ouvre le fichier à couper
source = fopen(chemin,"rb");

//on concatène le nom du fichier avec .part
strcat (chemin,".part");

//tant que ce qu'on lit = ce qu'on doit lire (do while)
do
{
//on doit changer le nom de fichier pour la découpe
if ( (nb == 0) | (nb == taille) )
{
//on initialise la variable de caractere lu
nb = 0;

//on incrémente la variable du fichier
num++;
strcpy (chemin_final,chemin);

//on la concatène avec le nom global : nom.part
itoa (num,numstr,10);
strcat (chemin_final,numstr);

//on crée le fichier destination
destination = fopen (chemin_final,"wb");
fclose (destination);
}

//on lit le fichier source
fread (tampon,sizeof(char),1,source);
nb ++;

//on ouvre le fichier destination à la fin
if ((destination = fopen (chemin_final,"ab")) == NULL)
{
destination = fopen (chemin_final,"wb");
}

//on écrit le fichier destination
fwrite(tampon,sizeof(char),1,destination);

//on ferme le fichier destination
fclose (destination);

//on test la fin du fichier source
}
while (!feof (source));

//on ferme le fichier source
fclose (source);

//on affiche un message
MessageBox (0,"Le fichier a été découpé","Succés",0);
}

//On colle ?
if (SendMessage (GetDlgItem (Dlg,ID_COLLER),BM_GETSTATE,0,0) == BST_CHECKED)
{
GetDlgItemText (Dlg,IDC_CHEMIN,chemin,250); //recup chemin

//ouvre le fichier destination à créer
destination = fopen(chemin,"wb");

//on concatène le nom du fichier avec .part
strcat (chemin,".part");

//tant qu'il y a des fichiers à coller
while (fin != true )
{
//on augmente l'indice du fichier à lire
num++;

//on recopie le chemin pour ne pas le modifier
strcpy (chemin_final,chemin);

//on concatène le nom avec l'indice
itoa (num,numstr,10);
strcat (chemin_final,numstr);

//On ouvre chaque fichier source 1 par 1
if ((source = fopen (chemin_final,"rb")) != NULL )
{

//tant qu'il y a des données
while (!feof(source))
{
//lecture du fichier
fread (tampon,sizeof(char),1,source);

//ecriture du fichier
fwrite (tampon,sizeof(char),1,destination);

}

//on ferme le fichier source
fclose (source);
}
else
{
//on quitte la boucle
fin = true;
}

} //fin du while

//on ferme le fichier destination
fclose (destination);

//on affiche un message
MessageBox (0,"Le fichier a été recollé","Succés",0);
}
return TRUE;

//bouton quitter
case IDCANCEL:
EndDialog(Dlg,Select);
PostQuitMessage(0);
return TRUE;

//bouton a propos
case IDABOUT:
MessageBox (0," Codé par 24.KaraS\n\n Greetz\n Kheo pour la ressource ;-)\n MinoS pour les cours de crack","A propos",0);
return TRUE;
}
default:
return FALSE;
}
return 0;
}
samedi 16 novembre 2002 à 23:28:13 | Re : splitter de fichier

Thaeron

while (!feof(source))
{
//lecture du fichier
fread (tampon,sizeof(char),1,source);

//ecriture du fichier
fwrite (tampon,sizeof(char),1,destination);

}

le prob vient de la, c'est tout con, feof sera true apres le fread or tu fais un fwrite apres et la condition sera testé apres le fwrite, donc trop tard. pour remedier remplace plutot par:

while (1)
{
//lecture du fichier
fread (tampon,sizeof(char),1,source);
if(feof(source))break;
//ecriture du fichier
fwrite (tampon,sizeof(char),1,destination);
}

ça devrait marcher parfaitement =)
Bonne continuation
dimanche 17 novembre 2002 à 00:24:50 | Re : splitter de fichier

24Karas

Merci pour ton aide Thaeron
c sûr que ça vient de la !!
comment ais-je pu être aussi bête
encore merci
24.KaraS



-------------------------------
Réponse au message :
-------------------------------

while (!feof(source))
{
//lecture du fichier
fread (tampon,sizeof(char),1,source);

//ecriture du fichier
fwrite (tampon,sizeof(char),1,destination);

}

le prob vient de la, c'est tout con, feof sera true apres le fread or tu fais un fwrite apres et la condition sera testé apres le fwrite, donc trop tard. pour remedier remplace plutot par:

while (1)
{
//lecture du fichier
fread (tampon,sizeof(char),1,source);
if(feof(source))break;
//ecriture du fichier
fwrite (tampon,sizeof(char),1,destination);
}

ça devrait marcher parfaitement =)
Bonne continuation
dimanche 17 novembre 2002 à 00:43:59 | Re : splitter de fichier

Thaeron

bhen de rien, j'avais fais la meme erreur, suffit d'y penser =)


Cette discussion est classée dans : fichier, source, chemin, destination, dlg


Répondre à ce message

Sujets en rapport avec ce message

Les fichiers [ par AngeloVivaldi ] J'utilise la méthode suivante pour copier un fichier vers une destination : FILE * source; FILE * desti; source = fopen(/* blabla */) /* blabla Petit Bug [ par LordBob ] Bonjour a tous,voici deux fonctions:#include #include // Variableschar SourceFile[1024];char DestinationFile[1024];<b convertir 3DS fichier en code source OpenGL [ par fabienGL ] Bonjour, je vous écris car j'aimerais que quelk1 me donne un logiciel, ou script (simple :-) ) pour "traduire" un fichier .max du logiciel 3D Studio M Chemin de fichier avec fopen en tant que variable (gros débutant) [ par jason_red2 ] Je m'explique:La fonction fopen admet, en tant qu'argument,des const char*, ce qui implique de définir le Path soit par une constante, un typedef pass Prob avec chaine de caractère [ par Pitch14 ] bonjour tout le monde avant tout.voila mon probleme :jai fait un programme qui detecte les commentaire d'un programmeet qui les met dans une page html probleme de listage de fichiers [ par Kevin972 ] salut!! je ne comprends pas la fonction ne liste rien du tout.........al'aide!!!!!!!!!!!!!!!!! voici ma fonction:#include#include#include#include#in ouverture de fichier avec fopen() [ par jack_j ] Salut à tous!J'ai un petit problème avec du c. Je suis débutant et je cherche à ouvrir un fichier pour en extraire des données.Le nom et chemin du fic manipulation de tableau de chaine [ par yserver ] bonjours a tousvoila donc le code qui pose pbun code plutot simple je debute//------------------------------------------------------------------------ comment ajouter un nouveau fichier source .cpp à dll ? [ par ilimo ] bonjour, quand je rajoute un nouveau fichier .cpp à ma dll , il y a message d'erreur.. mais si j'incorpore le contenu au fichier source principal, tou Ouvrir flux sur fichier dont le chemin contient des espaces (besoin d'aide:))) [ par vychnou ] Es ce que quelqun saurait comment ouvrir un flux sur un fichier dont le nom ou le chemin contient des espaces?ex:string destination="c:\program files\


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,281 sec (4)

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