Lire et écrire un fichier .txt avec du C

[Résolu]
Signaler
Messages postés
15
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
14 novembre 2005
-
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010
-
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

Messages postés
99
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
29 mars 2006

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);
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;<
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;<
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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;<
Messages postés
15
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
14 novembre 2005

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 .
Messages postés
15
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
14 novembre 2005

Ok merci pour les précisions
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

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...