Lecture/ecriture dans fichier

Soyez le premier à donner votre avis sur cette source.

Vue 44 058 fois - Téléchargée 2 127 fois

Description

Voilà quelques ptites méthodes à insérer dans une classe pour pouvoir lire/écrire/modifier dans un fichier texte.
le fichier texte se presentera comme ça :

variable1 ; valeur1
variable2 : valeur2
etc...

Utile pour garder des valeurs :)

Source / Exemple :


/* LECTURE D'UNE VARIABLE */
public string LireFile(string fichier, string variable)
{
   string valeur = "";
   FileInfo fi = new FileInfo(fichier);

/* on verifie si le fichier existe puis on ouvre l'acces au fichier */
   if (fi.Exists)
   {
      string s; string[] text;
      FileStream fs = new FileStream(fichier, FileMode.Open);
      StreamReader sr = new StreamReader(fs);

/* On crée une boucle qui compare les variables lignes par lignes */
/* jusqu'a trouver la variable demandée */
      do
         {
            s = sr.ReadLine();
            if ((s != null) && (s.StartsWith(variable) == true)) 
            {
                text = s.Split(new char[]{':'}); 
                valeur = text[1].Trim();
            }
         } while (s != null);

   }

/* On retourne la valeur de la variable (retourne chaine vide si pas trouvé) */
   return valeur;

}

/* AJOUTER UNE VARIABLE ET SA VALEUR */
public void EcrireFile(string fichier, string variable, string valeur)
{

   string s = "";
   FileInfo fi = new FileInfo(fichier);

/* On recupère le texte complet du fichier */
   if (fi.Exists) // on verifie ke le fichier existe
   {
      StreamReader sr = new StreamReader(fichier, ASCIIEncoding.Default);
      s = sr.ReadToEnd(); 
      sr.Close();
   }

/* si le fichier est vide ou si il n'existe pas on le crée */
/* et on ajoute la variable et sa valeur */
   if (s == null || s == "") 
   {
      StreamWriter sw = new StreamWriter(fichier, false, ASCIIEncoding.Default);
      sw.Write(variable + " : " + valeur);
      sw.Close(); 
   }
   else // Sinon on ajoute simplement la ligne apres celle existante
   {
      StreamWriter sw = new StreamWriter(fichier, true, ASCIIEncoding.Default);
      sw.Write("\r\n" + variable + " : " + valeur);
      sw.Close();
   }

}

/* MODIFICATION DE LA VALEUR D'UNE VARIABLE */
public void ModifFile(string fichier, string variable, string valeur)
{

   FileInfo fi = new FileInfo(fichier);

   if (fi.Exists) // si le fichier existe
   {

/* On met la totalité du fichier dans un variable */
      StreamReader sr = new StreamReader(fichier, ASCIIEncoding.Default);
      string s = sr.ReadToEnd(); 
      sr.Close();

/* On trouve ou est placé la variable dans le fichier */
      int i = s.IndexOf(variable);

/* On trouve la fin de la ligne de cette variable */
      int n = s.IndexOf("\r\n", i);

/* On récupère la chaine dans la variable p */
      string p = s.Substring(i, n - i); 

/* Enfon on remplace p par la variable + valeur donnée */
      s = s.Replace(p, variable + " : " + valeur);
      StreamWriter sw = new StreamWriter(fichier, false, ASCIIEncoding.Default);
      sw.Write(s);
      sw.Close();
   }

}

Conclusion :


C'est bidon mais très utile pour ceux qui ne savait pas :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
4
J'ai mis cet cet exemple dans un tutorial que vous retrouverez ici :
http://csharpfr.com/tutoriaux/GESTION-EXCEPTION-LECTURE-FICHIER-DIRECTIVE-PRECOMPILATION_749.aspx

Bonne lecture !
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
4
Pardon, rectification de mon précédent post, mais cette fois avec la fermeture du fichier (c'est mieux) :

FileStream fs = null;
try{
fs = new FileStream("NomDuFichier", FileMode.Open);
StreamReader reader = new StreamReader(fs);
string contenuFichier = reader.ReadToEnd();
}catch(FileNotFoundException fnfEx){
// A faire si le fichier n'existe pas
}catch(Exception ex){
// A faire pour le reste des exceptions
}finally{
if(fs != null) fs.Close();
}
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
4
Si je puis me permettre, pour la lecture d'un fichier, il faut mieux utiliser des try catch, non ? Vérifier qu'un fichier existe [if (fi.Exists)], c'est bien, mais cela ne garantit pas que le fichier est accessible en lecture par windows : un vérou peut être posé sur le fichier car un autre process accède au fichier en écriture.

Voila ma solution :
FileStream fs = null;
try{
fs = new FileStream("NomDuFichier", FileMode.Open);
StreamReader reader = new StreamReader(fs);
string contenuFichier = reader.ReadToEnd();
}catch(FileNotFoundException fnfEx){
// A faire si le fichier n'existe pas
}catch(Exception ex){
// A faire pour le reste des exceptions
}
Messages postés
22
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
4 février 2008

bon, je ne sait pas si c'est moi mais ASCIIEncoding.Default je suis obliger de le supprimer parceque sinon rien ne marche...
Ensuite j'ai eu pas mal de problemes avec les FileStream, donc je les ait supprimer et pour les streamreader, j'ai mis :
StreamReader sr = new StreamReader(fichier_ini);
où fichier_ini est une string qui contient le nom du fichier a ouvrir
et pour les streamwriter j'ai mis :
StreamWriter Sw = new StreamWriter(fichier_ini, false);

J'arrive a formatter mon fichier comme je veut mais je voudrait savoir si ce n'est pas dangeureux de ne pas utiliser les ASCIIEncoding.Default et les Filestream parceque l'appli que je developpe doit gerer des comptes de clients et il me faut du code robuste...
Merci de me repondre
PS : Grace a vous, j'ai gagner du temps de lecture dans mes 12 pavé sur le C#
Messages postés
2
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
4 août 2004

J'ai juste oublié de faire une petite correction.

Dans la fonction EcrireFile :

il faut écrire :

public int EcrireFile(string fichier, string variable, string valeur)

au lieu de :

public void EcrireFile(string fichier, string variable, string valeur)

Mille excuses.
Afficher les 13 commentaires

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.