Problème copie de fichier C/Linux

Problème copie de fichier C/Linux - Programmation

Marsh Posté le 23-03-2002 à 18:28:16    

Salut à tous,
 
je dois faie un "mini-shell" sous nux qui comprend notamment une fonction copier que voilà :
 
void cop_fic(){
 
int nb,pos=50;
FILE *fichier1, *fichier2;
char octetslus[MAXOCT];
char fichieracopier[MAX], nomcopie[MAX];
 
        printf("\n Quel fichier voulez-vous copier ? \n" );
        scanf("%s", fichieracopier);
        printf("test" );
        printf("\n Quel nom voulez-vous donner à votre copie ? \n" );
        scanf("%s", nomcopie);
 
fichier1=fopen(fichieracopier,"r" );
fichier2=fopen(nomcopie,"w" );
if (fichier1==NULL)
  printf("\n error" );
 else
   { printf("\n pas d'error" );
    fseek (fichier1,pos,SEEK_SET);
    while ( (nb=fread(octetslus,sizeof(char), MAX, fichier1)) >0 )
    {
      fwrite(octetslus, sizeof(char),nb,fichier2);
    }
 
    fclose(fichier1);
    fclose(fichier2);
   }
}
 
avec MAX défini à 512 et MAXOCT à 256
 
Le problème est que quand je copie un fichier texte classique de 360ko la fonction marche. Par contre avec un fichier de seulement 123 octets le fichier copié n'en fait que 73. Est-ce que qqn pourrait m'expliquer où est le problème?
 
PS : Comme doit le montrer le sujet et le code "Big débutant inside ©"


---------------
Le tout c'est d'y croire! DaBZHWDT site : www.setibzh.com
Reply

Marsh Posté le 23-03-2002 à 18:28:16   

Reply

Marsh Posté le 23-03-2002 à 18:52:27    

?
 
MAX = 512 et MAXOCT = 256 ?
 
ben gaffe, tu risque des soucis avec ta ligne :
 
nb=fread(octetslus,sizeof(char), MAX, fichier1
 
globalement, tu peux lire MAX (soit 512) octets dans un tableau de MAXOCT (256) octets .
ce qui n'est pas bon
 
donc :
 
nb=fread(octetslus,sizeof(char), MAXOCT, fichier1
 
 
Ensuite, a l'ouverture de tes fichiers, ouvre en "rb" plutot qu'en r
 
 
fichier1=fopen(fichieracopier,"rb" );  
fichier2=fopen(nomcopie,"wb" );  
 
Ensuite :
 
fseek (fichier1,pos,SEEK_SET);  
   
avec pos = 50
 
ben tiens, fais le calcul : 123-50 = 73 :D
 
devine d'ou viens l'erreur :D
 
vire moi cette ligne et tout rentrera dans l'ordre
Pourquoi tu l'as mise dis moi ??

 

[jfdsdjhfuetppo]--Message édité par chrisbk--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 23-03-2002 à 19:44:45    

pkoi bah euh...
 
parce que le prof l'avait mise :D  
 
en tout cas merci chrisbk :jap:


---------------
Le tout c'est d'y croire! DaBZHWDT site : www.setibzh.com
Reply

Marsh Posté le 23-03-2002 à 19:45:17    

juste une kestion...
 
rb = ?


---------------
Le tout c'est d'y croire! DaBZHWDT site : www.setibzh.com
Reply

Marsh Posté le 23-03-2002 à 19:50:29    

"read binary"
Ça évite notemment de convertir les 0x0A et 0x0D en retour de ligne (0A sous Linux, 0D0A sous Windows, si je me souviens bien)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed