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

petit_mateo 8 Messages postés mercredi 9 juin 2004Date d'inscription 6 juin 2005 Dernière intervention - 6 juin 2005 à 12:34 - Dernière réponse : Pamaury 341 Messages postés jeudi 3 avril 2003Date d'inscription 17 juin 2008 Dernière intervention
- 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 

12 réponses

Répondre au sujet
Pamaury 341 Messages postés jeudi 3 avril 2003Date d'inscription 17 juin 2008 Dernière intervention - 6 juin 2005 à 12:42
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Pamaury
Pamaury 341 Messages postés jeudi 3 avril 2003Date d'inscription 17 juin 2008 Dernière intervention - 6 juin 2005 à 14:41
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Pamaury
petit_mateo 8 Messages postés mercredi 9 juin 2004Date d'inscription 6 juin 2005 Dernière intervention - 6 juin 2005 à 13:06
0
Utile
Pamaury, merci bien mais y'a pas de fonction copier/coller dans stdio
Commenter la réponse de petit_mateo
petit_mateo 8 Messages postés mercredi 9 juin 2004Date d'inscription 6 juin 2005 Dernière intervention - 6 juin 2005 à 13:08
0
Utile
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
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 6 juin 2005 à 13:11
0
Utile
Tu es sous window (system("pause")). Utilise donc CopyFile (#include <windows.h>)
Commenter la réponse de vecchio56
petit_mateo 8 Messages postés mercredi 9 juin 2004Date d'inscription 6 juin 2005 Dernière intervention - 6 juin 2005 à 13:13
0
Utile
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
petit_mateo 8 Messages postés mercredi 9 juin 2004Date d'inscription 6 juin 2005 Dernière intervention - 6 juin 2005 à 16:08
0
Utile
Merci ! Tout ça m'a bien aidé et le soucy est résolu !

Specials thanx to AMAURY...
Commenter la réponse de petit_mateo
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 6 juin 2005 à 17:31
0
Utile
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
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 6 juin 2005 à 17:41
0
Utile
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
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 6 juin 2005 à 19:12
0
Utile
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
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 6 juin 2005 à 21:04
0
Utile
Mdrrrrrrrrr
pas mal celle là ;)


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