Lire et écrire un fichier .txt avec du C

Résolu
cs_Hkz Messages postés 15 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 14 novembre 2005 - 23 oct. 2005 à 14:32
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 23 oct. 2005 à 16:26
Bonjours a tous
J'ai codé un programme qui code du texte, mais pour l'instant il faut lui rentrer le texte par le clavier se qui n'est pas très pratique. Je voulais savoir si quelqu'un peut m'éclairer pour récupérer le texte a l'intérieur d'un fichier TXT le rentrer dans une variable et une fois coder par mon programme pouvoir écrire le texte coder dans un nouveau fichier .txt
Petite précision je voudrai faire sa en C si c possible

7 réponses

vangeurmasker Messages postés 99 Date d'inscription mercredi 12 mai 2004 Statut Membre Dernière intervention 29 mars 2006
23 oct. 2005 à 15:04
En C tu a plusieurs fonction pour gérer les fichier (l'extention ne change rien) :

- #include "stdio.h";

- tout d'abord tu crée un variable de type fichier:

FILE * monfichier;

- ensuite tu ouvre ton fichier

monfichier=fopen("nom du fichier","mode d'ouverture");

"mode d'ouverture" est une chaine de caractères ou tu peut rentrer plusieurs parametres

w pour écriture le fichier est effacé si il existe déja

r pour lire. le fichier doit exister.

b ou t pour le mode binaire ou texte (si tu a écrit dans ton fichier avec bloc note utilise le mode binaire)



tu peut combiner les différents modes : "wb" "rt"...

- pense a tester si ton fichier a été ouvert if(!monfichier) merde;

- pour lire :

char alire[50];

fread(alire , 1 , nbdecaractèresalire , monfichier);

-pour écrire :

char aecrire[50]="Je veux écrire ceci";


fread(aecrire, 1 , strlen(aecrire), monfichier);



autre fonction utile

fflush(monfichier); permer d'écrire réelement dans le fichier (sinon les données restent dans la ram)



et enfin on ferme le fichier

fclose(monfichier);
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
23 oct. 2005 à 15:36
Bé d'abord

On va récupérer le HANDLE du fichier souhaité ( l'identifiant en gros )

Donc on utilise CreateFile avec les arguments qui vont avec et qui sont disponible sur msdn si tu veux plus de détails



Donc apres on teste si le handle que l'on a récupéré est bien valide

INVALID_HANDLE_VALUE


On déclare ensuite 3 variables :

char *TextInFile; //C'est un pointeur qui contiendra les données du fichiers



DWORD dwByteToRead; //C'est le nombre d'octet à lire, on l'obtient grace à GetFileSize(HANDLE);

DWORD dwByteReaden; //C'est un paramètre que ReadFile initialisera
après l'éxecution de la fonction, il renvoit le nombre d'octet lu



Donc si le nombre d'octet à lire est différent du nombre d'octet lu, c'est qu'il y a bel et bien un problème !

Donc on ferme le Handle du fichier avec CloseHandle(HANDLE);



J'ai passé biensur le malloc( ... ) qui est supposé connu bien entendu ;)
if(!Meilleur("Joky")) return ERREUR;<
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
23 oct. 2005 à 15:07
Hum Hum :)



HANDLE hFile = CreateFile( szFileName,




GENERIC_READ,




FILE_SHARE_READ,




NULL,




OPEN_EXISTING,




FILE_ATTRIBUTE_NORMAL,




NULL );



if(hFile == INVALID_HANDLE_VALUE)

{

MessageBox(0, "Erreur lors de l'ouverture du fichier !", "Erreur", 0x10);

return 0;

}



char *TextInFile;

DWORD dwByteReaden;

DWORD dwByteToRead = GetFileSize(hFile);



TextInFile = (char*)malloc(iSize+1);



if(!ReadFile( hFile, TextInFile, dwByteToRead, &dwByteReaden, NULL))

{

CloseHandle(hFile);

return 0;

}



if(dwByteToRead != dwByteReaden)

{

MessageBox(0, "Erreur lors de la lecture du fichier !", "Erreur", 0x10);

CloseHandle(hFile);

return 0;

}



TextInFile[dwByteToRead] = 0;


Voila maintenant TextInFile contient les données du fichier nommé ici : szFileName;
if(!Meilleur("Joky")) return ERREUR;<
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
23 oct. 2005 à 15:09
et le free(TextInFile) à la fin qui va avec ! :)

Je l'oublie toujours lui


PS : C'est vrai que fopen() etc... c'est beaucoup plus simple à
comprendre, mais bon autant partir dans le concret une fois pour toute
if(!Meilleur("Joky")) return ERREUR;<
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Hkz Messages postés 15 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 14 novembre 2005
23 oct. 2005 à 15:20
Sest vrai que j'ai pas tout compris a ton code .... tu pourras me l'expliquer si ça te dérange pas ? autremement c vrai que la solution de vangeurmasker me convien mais je suis curieux de savoir comment ton code fonctionne .
0
cs_Hkz Messages postés 15 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 14 novembre 2005
23 oct. 2005 à 15:45
Ok merci pour les précisions
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
23 oct. 2005 à 16:26
bonjour,



joky a dit : "PS : C'est vrai que fopen() etc... c'est beaucoup plus simple à
comprendre, mais bon autant partir dans le concret une fois pour toute"



et le malloc alors...

Matt...
0
Rejoignez-nous