begin process at 2008 07 25 18:23:17
1 216 413 membres
372 nouveaux aujourd'hui
14 181 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LECTURE/ECRITURE DANS FICHIER


Information sur la source

Catégorie :Fichiers / Disque Source .NET ( DotNet ) Classé sous : modification, fichier Niveau : Débutant Date de création : 14/08/2003 Date de mise à jour : 18/08/2003 14:12:25 Vu / téléchargé: 25 617 / 1 637

Note :
8,08 / 10 - par 12 personnes
8,08 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

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

  • /* 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();
  • }
  • }
/* 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 :)  
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de spectresombre le 14/08/2003 21:32:51

    J'ai oublie de préciser de rajouter un using System.IO et un using System.Text :)

  • signaler à un administrateur
    Commentaire de gg00xiv le 16/08/2003 15:12:48

    illisible, surtout si ca sadresse au debutants ...

  • signaler à un administrateur
    Commentaire de tommz le 17/08/2003 18:57:32

    comme gg00xiv...
    c'est mal codé en plus et c'est super fermé comme code..

  • signaler à un administrateur
    Commentaire de spectresombre le 18/08/2003 09:43:22

    Pour la présentation j'avoue ke la mise en page n'est pas extra (un vendredi soir avant de quitter le taf j'étais pressé lol)
    Par contre "super fermé"..... C'est pas censé faire le café ce script.

  • signaler à un administrateur
    Commentaire de spectresombre le 18/08/2003 11:28:21

    Et pour Tommz : J'accepte volontiers les critiques sauf celles de personne qui ne mettent pas de sources :)

  • signaler à un administrateur
    Commentaire de Bki le 18/09/2003 11:18:04

    Pour LireFile(fichier, variable), et peut-être pour d'autres, j'ai pas vérifié, je ne vois pas de sr.Close(). Il faut toujours les fermer.

    Je pense que ton code pour modifier une variable plante s'il n'y a qu'une seule variable dans le fichier. Il ne trouvera pas le "
    " et ça retournera -1, tu feras donc un substring avec un indice négatif. A vérifier quand même... Ca vient du fait que quand tu lis une ligne de fichier, ça enlève les marques de fin de ligne.

  • signaler à un administrateur
    Commentaire de Jujufouq le 23/04/2004 17:43:01

    Je cherche à modifier une séquence d'octets dans un fichier de plusieurs GigaOctets par une autre séquence d'octets de même taille que la première. Il est bien évident que je ne vais pas faire passer le fichier dans une variable... alors comment faire???

  • signaler à un administrateur
    Commentaire de dadavidou2005 le 04/08/2004 17:24:55

    Voici le code corrigé. (avec la fermeture des descripteurs).  :)  a+

    using System.IO;
    using System.Text;

    /* 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);

    fs.Close ();
    sr.Close ();

    }

    /* 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)
    {

    int flag;
    FileInfo fi = new FileInfo(fichier);

    /* On recupère le texte complet du fichier */
    if (fi.Exists) // on verifie ke le fichier existe
    {
    flag = 1;
    StreamWriter sw = new StreamWriter(fichier, true, ASCIIEncoding.Default);
    sw.Write(variable + " : " + valeur + "\r\n");
    sw.Close();

    }
    else
    {
    flag = 0;
    }
    /* On retourne la valeur du drapeau (retourne 0 si pas trouvé) */
    return flag;
    }


    /* 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();
    }

    }  

    Testé et approuvée !

  • signaler à un administrateur
    Commentaire de dadavidou2005 le 04/08/2004 17:34:19

    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.

  • signaler à un administrateur
    Commentaire de Lucky Hal le 19/02/2005 16:29:04

    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#

  • signaler à un administrateur
    Commentaire de yoannd le 02/10/2007 15:31:44

    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
    }

  • signaler à un administrateur
    Commentaire de yoannd le 02/10/2007 15:44:23

    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();
    }

  • signaler à un administrateur
    Commentaire de yoannd le 03/10/2007 11:12:35

    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 !

Ajouter un commentaire

Pub



Appels d'offres

Animation Flash alimen...
Budget : 6 000€
Creation portail video
Budget : 3 000€
Site de e-commerce
Budget : 5 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS