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

Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Dernière intervention
6 juin 2005
- - Dernière réponse : Pamaury
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Dernière intervention
17 juin 2008
- 6 juin 2005 à 22:39
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!!!)
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Dernière intervention
17 juin 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Pamaury
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Dernière intervention
17 juin 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Pamaury
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Dernière intervention
6 juin 2005
0
Merci
Pamaury, merci bien mais y'a pas de fonction copier/coller dans stdio
Commenter la réponse de petit_mateo
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Dernière intervention
6 juin 2005
0
Merci
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 !
Commenter la réponse de petit_mateo
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
0
Merci
Tu es sous window (system("pause")). Utilise donc CopyFile (#include <windows.h>)
Commenter la réponse de vecchio56
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Dernière intervention
6 juin 2005
0
Merci
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!
Commenter la réponse de petit_mateo
Messages postés
8
Date d'inscription
mercredi 9 juin 2004
Dernière intervention
6 juin 2005
0
Merci
Merci ! Tout ça m'a bien aidé et le soucy est résolu !

Specials thanx to AMAURY...
Commenter la réponse de petit_mateo
Messages postés
1791
Date d'inscription
lundi 22 novembre 2004
Dernière intervention
31 janvier 2009
0
Merci
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
Commenter la réponse de cs_Joky
Messages postés
1791
Date d'inscription
lundi 22 novembre 2004
Dernière intervention
31 janvier 2009
0
Merci
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
Commenter la réponse de cs_Joky
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
0
Merci
fread ne marche pas bien avec les phrases qui n'ont pas de sens, cependant tu peux essayer de mettre un zero terminal
Commenter la réponse de vecchio56
Messages postés
1791
Date d'inscription
lundi 22 novembre 2004
Dernière intervention
31 janvier 2009
0
Merci
Mdrrrrrrrrr
pas mal celle là ;)


void Aurevoir( void ); //Bonne journée
Commenter la réponse de cs_Joky
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Dernière intervention
17 juin 2008
0
Merci
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
Commenter la réponse de Pamaury

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.