Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1494 connectés 

  FORUM HardWare.fr
  Programmation

  [C/C++] Lecture/Ecriture d'un Executable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Lecture/Ecriture d'un Executable

n°45501
Pikkachu
PIKA !
Posté le 09-07-2001 à 23:14:53  profilanswer
 

1.Je cherche à copier un fichier .exe à une autre addresse dans le disque dur mais ca fonctionne pas meme en mode binaire  
 
#include "stdio.h"  
 
void main()  
{  
 
char fichier[25],fichier2[25];  
FILE *lecture,*ecriture;  
char a;  
 
// addresse des fichiers .exe ou autre  
puts("Addresse du fichier a lire : " );  
gets(fichier);  
puts("\nAddresse du fichier a ecrire : " );  
gets(fichier2);  
 
// ouverture en mode binaire  
lecture = fopen(fichier,"rb" );  
ecriture = fopen(fichier2,"wb" );  
 
// copie du fichier de l'adresse1 à l'addresse2  
while(fread(&a,sizeof(char),1,lecture),!feof(lecture))  
{fwrite(&a,sizeof(char),1,ecriture);}  
 
// fermeture des fichiers  
fclose(lecture);  
fclose(ecriture);  
 
}  
 
Pourquoi ca fonctionne pas?
 
2.Comment gerer les caractere dans les fichiers exe car ils n'existent pas dans le clavier?  
Je cherche à faire un programme de compression qui remplace les caracteres repetes plusieurs fois de suite par un chiffre suivi du carctere repeté c'est à faire pour un fichier texte car les caracteres sont gerables (sur le clavier) mais comment faire pour les executables?  
 
@+


---------------
PIKACHU !
mood
Publicité
Posté le 09-07-2001 à 23:14:53  profilanswer
 

n°45749
Pikkachu
PIKA !
Posté le 10-07-2001 à 16:47:09  profilanswer
 

24 visites et 0 reponses.... la question est peut etre trop compliquée...

n°45778
Toucouch
Posté le 10-07-2001 à 18:43:28  profilanswer
 

Alors, j'ai essayé de compiler ton truc:
 
1. J'avais jamais utilisé puts et gets mais le compilo me met texto "The use of gets is dangerous...". Donc, je pense qu'il vaudrait mieux lui préférer un scanf ou mieux, l'utilisation des paramètres de main...
 
2. Quand tu ouvres des fichiers, teste si l'ouverture s'est effectuée sans problème, ça ne coûte pas grand chose, et ça peut t'aider à comprendre quand ça ne marche pas...
 
3.

Code :
  1. while(fread(&a,sizeof(char),1,lecture),!feof(lecture))


Là, je dois dire que c'est particulièrement illisible... Je ne savais même pas qu'un compilo autorisait ça... Pourtant, je suis loin d'être un maniaque...
 
 
Donc, après nettoyage, j'ai ça:

Code :
  1. #include "stdio.h"
  2. int main(int argc,char *argv[])
  3. {
  4.   char fichier[25],fichier2[25];
  5.   FILE *lecture,*ecriture;
  6.   char a;
  7.   // addresse des fichiers .exe ou autre  
  8.   printf("Addresse du fichier a lire : " );
  9.   scanf("%s",fichier);
  10.   printf("\nAddresse du fichier a ecrire : " );
  11.   scanf("%s",fichier2);
  12.   // ouverture en mode binaire  
  13.   if(!(lecture = fopen(fichier,"rb" )))
  14.     {
  15.       printf("Ouverture de %s impossible.\n",fichier);
  16.       return 1;
  17.     }
  18.   if(!(ecriture = fopen(fichier2,"wb" )))
  19.     {
  20.       printf("Ouverture de %s impossible.\n",fichier2);
  21.       return 1;
  22.     }
  23.   // copie du fichier de l'adresse1 à l'addresse2  
  24.   fread(&a,sizeof(char),1,lecture);
  25.   while(!feof(lecture))
  26.     {
  27.       fwrite(&a,sizeof(char),1,ecriture);
  28.       fread(&a,sizeof(char),1,lecture);
  29.     }
  30.   // fermeture des fichiers  
  31.   fclose(lecture);
  32.   close(ecriture);
  33. }

 
 
Et ça marche...

n°45811
Pikkachu
PIKA !
Posté le 10-07-2001 à 23:43:42  profilanswer
 

oui tu as raison le probleme etait dans cette ligne:
while(fread(&a,sizeof(char),1,lecture),!feof(lecture))  
 
je l'ai finalement remplacé par:
while(fread(&a,sizeof(char),1,lecture)&&!feof(lecture))
c'est plus court que ce que tu propose
 
gets et puts sont plus rapide que printf et scanf car ils font aucune verification

n°45847
Toucouch
Posté le 11-07-2001 à 10:03:37  profilanswer
 

C'est quoi le but du jeu? Utiliser le moins d'octets possible pour tn source? Tu peux aussi te dispenser de sauter des lignes (le compilo s'en fout) et nommer toutes tes variables avec un seul caractère... :D
 
Non, sérieux, ça dépend de ce que tu fais, mais si tu dois faire un code qui est susceptible d'être relu par un autre (ou par toi-même plus tard!) tu as intérêt à aérer...
 
Et d'ailleurs, il y a plus court pour ta condition while:

Code :
  1. while(fread(&a,1,1,lecture))


Puisque fread te retourne le nombre d'octets effectivement lus, et que lorsqu'il est à la fin, il n'en lit aucun et retourne 0... ;)
 
Et pendant que j'y suis, tu peux encore gagner de la place et du temps en te dispensant de demander à l'utilisateur d'entrer les 2 noms de fichiers: tu les prends directement en arguments:

Code :
  1. int main(int argc,char *argv[])
  2. {
  3. ...
  4. lecture = fopen(argv[1],"rb" ); 
  5. ecriture = fopen(argv[2],"wb" ); 
  6. ...


 
A+

n°45896
TheNicow
Posté le 11-07-2001 à 11:58:32  profilanswer
 

Autre chose, utiliser, la lecture/ecriture caractere par caractere, c'est pas tres astucieux.
Ca te fait perdre bcp de temps.
 
Il vaut mieux que tu utilises un buffer, par exemple 1 ou 2 Mo.
 
par exemple :
char buffer[2000000]; //bon d'accord cé pas vraiment 2Mo ;-))
 
int bytes_read = fread(buffer, sizeof(char), 2000000, lecture);
while(bytes_read > 0)
{
  fwrite(buffer, sizeof(char), bytes_read, ecriture);
  bytes_read = fread(buffer, sizeof(char), 2000000, lecture);
}

n°45906
Toucouch
Posté le 11-07-2001 à 12:40:23  profilanswer
 

Effectivement, avec un tampon, c'est beaucoup mieux... Mais allouer un bloc de 2Mo d'un coup, t'as pas peur toi! Quelques dizaines de ko c'est déjà pas mal...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C/C++] Lecture/Ecriture d'un Executable

 

Sujets relatifs
[PHP] Taille d'ecriture dans forum[JAVA] ecriture dans un fichier
[php] lecture de fichier chez le client....Créer un executable sur un CD ?
Ecriture de services NT avec Delphi 5 ...MFC, CString, écriture dans un fichier texte.
[ASP] Ecriture dans fichier...[JAVA]Pb écriture fichier txt
une page asp avec plusieurs re-lecture???[VB6] Pb lecture d'une valeur de type DWORD dans la base de registre
Plus de sujets relatifs à : [C/C++] Lecture/Ecriture d'un Executable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR