Copier/coller de données contenue dans un fichier en C [Résolu]

Signaler
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
6 juin 2005
-
Pamaury
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
-
Voici mon code :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int x()
{
char ANCIEN[] = "resta.txt";
char NOUVEAU[] = "restb.txt";
FILE *INFILE, *OUTFILE;
char J1o[30], J2o[30];

INFILE = fopen(ANCIEN, "r");
if (!INFILE)
{
printf("Erreur : impossible d'ouvrir...%s", ANCIEN);
exit(-1);
}


OUTFILE = fopen(NOUVEAU, "w");
if (!OUTFILE)
{
printf("Erreur : impossible d'ouvrir...%s", NOUVEAU);
exit(-1);
}


while (!feof(INFILE))
{
fscanf (INFILE, "%s\n%s\n", J1o, J2o);
fprintf (OUTFILE, "%s\n%s\n", J1o, J2o);
}


fclose(OUTFILE);
fclose(INFILE);
system("pause");
return 0;
}


int y(char *J1, char *J2)
{
time_t t;
char ANO[] = "resta.txt";
FILE *ENREG;
ENREG = fopen(ANO, "w");
if (!ANO)
{
printf("Erreur : impossible d'ouvrir...%s", ENREG);
exit(-1);
}
else
{
time(&t);
printf("%s\n", ctime(&t));
fprintf (ENREG, "%s %s %s\n", J1, J2, ctime(&t));
}
}


int main()
{
char Jo1[30];
char Jo2[30];
printf("Nom du joueur 1 : ");
scanf("%s", Jo1);
printf("Nom du joueur 2 : ");
scanf("%s", Jo2);
y(Jo1, Jo2);
x();
}

Mon soucy est que le second enregistrement (dans le fichier NOUVEAU) qui donc doit correspondre à un copier/coller du 1er (fichier ANCIEN) ne se fait pas correctement !
Dans le fichier ANCIEN, j'ai :
azezr rgr Mon Jun 06 12:17:05 2005
Et dans le second, fichier NOUVEAU, il s'enregistre ça :
Jÿ_+^ÿ(ßú
&6‚ÿ ÿÆÕºx¤Bresta.txt

Il est le soucy??? Que dois-je faire??? Je v peter un cable et l'ordi par la meme occaz! lol

Par la meme occassion, que dois-je rajouter pour que l'enregistrement du 1er fichier (ANCIEN) doit se coller à la fin du 2eme enregistrement (NOUVEAU) ???

Merci de votre rapidité (please avant le 20 juin 2005!!!)

12 réponses

Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
2
si tu dois copier et coller le fichier parfaitement, regarde s'il n'existe pas une fonction copy dans stdio



sinon c'est beaucoup plus rapide de faire:

OUTFILE=fopen(outfile,"wb");// note 'b' après le' w'

INFILE=fopen(infile,"rb");// idem



fseek(INFILE,0,SEEK_END);// va à la fin du fichier

long size=ftell(INFILE);// récupère la taille

fseek(INFILE,0,SEEK_SET);// retourne au début



void *lpBuffer=malloc(size);

fread(lpBuffer,1,size,INFILE);

fwrite(lpBuffer,1nsize,OUTFILE);

fclose(INFILE);

fclose(OUTFILE);



ce la marche si le fichier fais moi de 4Go

et là pas de problème

A m a u r y
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
2
avec ma fonction cela te permet de copier/coller n'importe quel fichier:



int copy_file(const char *infile,const char *outfile)

{

FILE *OUTFILE=fopen(outfile,"wb");// note 'b' après le' w': écriture en binaire(tous les octets sont copier)

FILE *INFILE=fopen(infile,"rb");// idem lecture en binaire(tous les octets sont copier)



if(!INFILE || !OUTFILE)

return 0;



fseek(INFILE,0,SEEK_END);// va à la fin du fichier

long size=ftell(INFILE);// récupère la taille

fseek(INFILE,0,SEEK_SET);// retourne au début



void *lpBuffer=malloc(size);

fread(lpBuffer,1,size,INFILE);

fwrite(lpBuffer,1,size,OUTFILE);

fclose(INFILE);

fclose(OUTFILE);



return 1;

}


Pour ta deuxième question je n'ai pas tout compris:

tu veux copier ce qui est dans le fichier ANCIEN pour le recoller à la suite de ce même fichier ???

si c'est bien cela il suffit de tranbsformer cette ligne:

FILE *OUTFILE=fopen(outfile,"wb");

en:

FILE *OUTFILE=fopen(outfile,"awb");// le 'a' permet d'ajouter à la fin du fichier au lieu d'écraser



et d'appeler ma fonction avec le même fichier en entrée et sortie:

copy_file("test.txt","test.txt");


A m a u r y
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
6 juin 2005

Pamaury, merci bien mais y'a pas de fonction copier/coller dans stdio
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
6 juin 2005

Je pige pas l'utilité du d derriere le mode d'ouverture des fichiers...

Sinon merci pour la fonction de fin de fichiers !

Ma question reste d'actualité ! Snif !
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu es sous window (system("pause")). Utilise donc CopyFile (#include <windows.h>)
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
6 juin 2005

vecchio56, bonne idée mais je bosse sur Turbo C et la bibliotheque window.h n'existe pas!!!!
Je suis obligé car c pour des exams d'utiliser le vieux turbo C !!!
La haine!
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Statut
Membre
Dernière intervention
6 juin 2005

Merci ! Tout ça m'a bien aidé et le soucy est résolu !

Specials thanx to AMAURY...
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Mais dis moi, après un malloc ???
on fait pas un free( ... ) ;)
lol, pour une fois que j'peux faire une remarque :p


void Aurevoir( void ); //Bonne journée
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Et pourquoi quand je le fais et que j'affiche le buffer, il me rajoute des caractères ???
Genre dans le fichier ya : "Joky c'est un beau gosse quand meme"
et quand je l'affiche, j'ai : "Joky c'est un beau gosse quand meme\Micra"
étrange...
Faudrait pas lui indiquer la fin de la chaïne ???

void Aurevoir( void ); //Bonne journée
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
fread ne marche pas bien avec les phrases qui n'ont pas de sens, cependant tu peux essayer de mettre un zero terminal
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Mdrrrrrrrrr
pas mal celle là ;)


void Aurevoir( void ); //Bonne journée
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
2
Comment çà çà rajoute des caratcère ??? j'ai essayé sur mon ordi et
fread et de bonne humeur il copie exactement ce qu'il faut !! C'est
juste que tu as oublié le zéro terminal: dans un fichier il n'y en a
pas il faut le rajouter manuellement(ne pas oublier d'allouer un octete
supplémentaire pour ce zéro)

De plus c'est vrai que j'ai oublié(honteusement) le free


A m a u r y