while (position_courante<taille) <-- pour moi c'est cette etape qui fait la soustraction dont tu parles, mais par précaution je vais reverifier completement le prog, pour ce qui est du controle, pour savoir si le modifié est plus grand que l'original avant de démarrer, jte fais ca, c'est juste une ligne a rajouter
edit: alors apres revérif, je comprends vraiment pas de quel bug tu parles: je pars d'un fichier original plus grand qu'un fichier modifié, le programme se met a la fin du modifié et le complete avec des zéro jusqu'a ce que sa taille soit egale à l'originale
Sinon j'ai rajouté un controle de taille pour voir si le modifié est plus grand que l'original, pour ce qui est de killer le batch, ce n'est pas possible facilement a l'interieur de mon prog de faire ca, par contre, si tu sais controler la valeur de retour d'un programme, je peux m'arranger
pr faire un "return -1" en cas d'erreur et un "return 0" en cas de succes, ski te permet de controler et de fermer le batch si ca rate.
Citation:
/* ================================================== ========================= */
/* */
/* remp0.c */
/* (c) 2009 */
/* */
/* Remplit un fichier de 0 a partir de la fin */
/* */
/* ================================================== ========================= */
#include <stdio.h>
#include <stdlib.h>
/* Maintenant argv[1] est le premier argument, le fichier original
et argv[2] est le second argument, le fichier modifié! */
int main(int argc,char **argv){
printf("remp0 realise par Wolfi pour metagames-eu\n");
FILE *ori = NULL;
FILE *mod = NULL;
ori=fopen(argv[1],"r+b"); //ouverture du fichier en mode lecture/ecriture sans effacement
if (ori != NULL) {
long taille=0;
fseek (ori , 0 , SEEK_END);
taille = ftell (ori); // on a la taille du fichier
fclose(ori);
mod=fopen(argv[2],"a");
long taille_mod=ftell(mod); // on a la taille du fichier modifié
if ( (mod != NULL) && (taille_mod<taille)){
/* On va maintenant ajouter autant de 0 que necessaire a modinom */
long position_courante=ftell(mod); //on a l'offset en cours à la queue du fichier a modifier
while (position_courante<taille){
fputc(0,mod);
position_courante++;
}
fclose(mod);
puts("Patchage du fichier reussi");
}
else printf("Impossible d'ouvrir le fichier modifié ou celui-ci est plus grand que le fichier original.\n");
}
else{
// On affiche un message d'erreur si un des deux fichiers n'est pas present
printf("Impossible d'ouvrir le fichier original.\n");
}
return 0;
}
|