none
Créer un fichier texte et écrire dedans RRS feed

  • Discussion générale

  • Bonjour, je suis en stage et je débute totalement en c#, je voudrais savoir si vous pouvez m'aider car j'ai essayer deux methodes pour creer et ecrire un fichier (streamwriter et append). Ca marche bien avec :

     using (StreamWriter writer = File.AppendText(sFileName))

                {

                    writer.WriteLine("Test 1: Initialize Component\n");

                    writer.WriteLine(DateTime.Now);

                    TimeNow1 = DateTime.Now;

                }

     

    Le probleme c'est que les fonctions qui ne sont pas directement liés a "public mainwindow" mais qui s'execute quand meme, ne sont pas repertorie dans le fichier. Auriez-vous une alternative?

    vendredi 29 juillet 2011 16:12

Toutes les réponses

  • Bonjour,

     

    Le streamWriter crée le fichier automatiquement et vous avez besoin d'un writer.close pour que le fichier soit enregistré

    StreamWriter writer = new StreamWriter("C:\\Test.txt");
    	//écriture    
    	writer.WriteLine("bonjour");
    writer.close();
    


    et pour les fonctions vous pouvez  les convertir en string 

     

    Cordialement

     


    Best Regards...Please mark as answer if my post is helpful
    samedi 30 juillet 2011 08:01
  • StreamWriter writer = new StreamWriter("C:\\Test.txt");
    //écriture
    writer.WriteLine("Bonjour Tounes");
    writer.Flush();
    writer.close();

    Cordialement

    The complexity resides in the simplicity Follow me at: http://smartssolutions.blogspot.com
    • Modifié MASNSN samedi 30 juillet 2011 11:02 rectifier le code
    samedi 30 juillet 2011 10:58
  • Bonjour,

    Voici un exemple simple pour lire et écrire dans un fichier

    Utilisez la méthode ecris comme ceci:

    using System;
    using System.IO;
    namespace cs_file_read
    {class Program{static void Main()
      {
       // Les Lire et écrire dans des fichiers
       Action<string> affiche = s => Console.WriteLine(s);
       Action<char> quit = s => Console.ReadKey();
       string fichierChemin = "C:\\Users\\user1\\Documents\\test.txt";
       string[] lignes = {"ceci est du texte", "sur plusieurs lignes", "et même une troisième ligne" };
       //File.WriteAllLines(fichierChemin, lignes);
       ecris(fichierChemin, lignes);
       affiche("le fichier a été écrit");
       affiche("");
       affiche("nous allons lire et afficher le fichier text.txt");
       lit(fichierChemin);
       string[] lignes3 = {"et une quatrième ligne"};
       File.AppendAllLines(fichierChemin, lignes3);
       affiche("une quatrième ligne a été écrite");
       lit(fichierChemin);
       quit('e');
      }
    
      private static void lit(string chemin)
      {
       Action<string> affiche = s => Console.WriteLine(s);
       string[] donnees = File.ReadAllLines(chemin);
       for (int i = 0; i < donnees.Length; i++)
       {
        affiche(donnees[i]);
       }
       affiche("");
      }
      private static void ecris(string chemin, string[] donnee)
      {
       if (File.Exists(chemin))
       {
        File.AppendAllLines(chemin, donnee);
       }
      }
      private static void ecris(string chemin, string donnee)
      {
       if (File.Exists(chemin))
       {
        File.AppendAllText(chemin, donnee);
       }
      }
    
     }
    }


     


    fred
    dimanche 31 juillet 2011 21:30
  • Merci beaucoup pour vos reponses, mais mon probleme est que je ne peux pas mettre un fichier avec un lien direct parce que tout le monde doit pouvoir l'utiliser. En ce qui concerne streamwriter, lorsque je met "close()", ca marche pas, comme si en fermant le fichier, il ne reconnait plus toutes les fonctions, il ne les ecrit pas toutes dans le fichier et il me met des erreurs, du genre "ce fichier est deja utilise".
    lundi 1 août 2011 07:14
  • Bonjour,

     

    Pouvez vous expliquer un peu ce que vous voulez faire ou ce qui vous pose problème ? Que désigne "public mainwindow".

     

    Même si je sens que vous vouliez implémenter un système de log, si c'est le cas vous pouvez vous appuyer sur des systèmes existant déjà comme :

    Sinon au pire des cas vous pouvez nous détailler un plus votre problème et on manquera pas de venir à votre secours.

     

    Cordialement.

    lundi 1 août 2011 11:27
    Auteur de réponse
  • Bonjours

    Essaye ce code

    FileStream stream = new FileStream(@"<votre chemin>", FileMode.Append, FileAccess.Write);
          StreamWriter writer = new StreamWriter(stream);
          using (writer)
          {
            writer.WriteLine("Test 1: Initialize Component\n");
            writer.WriteLine(DateTime.Now);
            writer.Flush();
          }
    

    Cordialement


    The complexity resides in the simplicity Follow me at: http://smartssolutions.blogspot.com
    lundi 1 août 2011 11:56
  • Oui mon but est d'implementer un systeme de log afin de calculer le temps que met une fonction a s'executer. Le probleme est que les fonctions que je veux observer ne sont pas toutes au meme endroit...
    lundi 1 août 2011 12:19
  • Et merci beaucoup pour vos reponses, je vais essayer ces codes

     

    lundi 1 août 2011 12:19
  • Bonjour,

    Premièrement, tu dois convertir DateTime.Now en chaine de caractère

    j'ai essayé ton code et il fonctionne

    Est-ce que plusieurs personnes ou plusieurs instances de ton programme tournent en même temps ?

    Si oui c'est normal que le fichier soit locké, dans ce cas il faut tester si le fichier est dispo en écriture ou pas

    Voici ton code modifié qui fonctionne chez moi:

    using System;
    using System.IO;
    namespace cs_FileStream
    {
      class Program
      {
        static void Main(string[] args)
        {
          string chemin = @"C:\local\test.txt";
          FileStream stream = new FileStream(chemin, FileMode.Append, FileAccess.Write);
          StreamWriter writer = new StreamWriter(stream);
          using (writer)
          {
            writer.WriteLine("Test 1: Initialize Component\n");
            writer.WriteLine(DateTime.Now.ToString());
            writer.Flush();
            writer.Close();
          }
          Console.ReadKey();
        }
      }
    }
    



    fred
    lundi 1 août 2011 12:39
  • Bonjour,

    Voici comment je log dans mes programmes:

    using System;
    using System.IO;
    namespace cs_utilisation_classe_log
    {
      class Program
      {
        public static string logFileName = @"C:\local\test.log"; // variable globale utilisable partout
    
        static void Main(string[] args)
        {
          // on initialize le fichier de log au début du pgm
          initializeLogFile();
          //on écrit dans le log à n'importe moment comme ceci:
          log("A telle étape du pgm, il s'est passé ceci");
          //On continue le pgm
          int a = 5;
          log("le pgm est fini");
          Console.ReadKey();
    
        }
        private static void log(string chaine)
        {
          // si fichier est inexistant, alors on le créé sinon on ajoute
          StreamWriter s = File.AppendText(logFileName);
          s.WriteLine(DateTime.Now.ToString() + " " + chaine);
          s.Close();
        }
        private static void initializeLogFile()
        {
          if (File.Exists(logFileName))
          {
            File.Delete(logFileName); // j'efface le log de la veille
          }
          StreamWriter sw = new StreamWriter(logFileName);
          sw.WriteLine("Lancement du programme");
          sw.WriteLine(DateTime.Now.ToString());
          sw.WriteLine("-------------------");
          sw.Flush();
          sw.Close();
        }
      }
    }
    



    fred
    lundi 1 août 2011 12:51
  • Merci beaucoup, mais en fait je ne veux pas de lien direct du genre "C:\local\test.log", j'aimerais que le fichier se crée et se mette directement dans le repertoire du projet. Voici les 3 codes que j'ai utilise:

            void Instance_VisibleModelsChanged(object sender, EventArgs e)

            {

                DateTime TimeNow3 = new DateTime();

                TimeSpan TimeDifference3 = new TimeSpan();

    // Methode 1:

                TextWriter t3 = new StreamWriter(sFileName2);

                t3.WriteLine("Test 3: Update Visible Models\n");

                t3.WriteLine(DateTime.Now);

                TimeNow3 = DateTime.Now;

                t3.Close();

    // ou methode 2:

                //using (StreamWriter writer = File.AppendText(sFileName))

                //{

                //    writer.WriteLine("Test 3: Update Visible Models\n");

                //    writer.WriteLine(DateTime.Now);

                //    TimeNow3 = DateTime.Now;

                //}

     

    // ou enfin methode 3:

               // FileStream stream = new FileStream("testFile3.txt", FileMode.Append, FileAccess.Write);

               // StreamWriter writer = new StreamWriter(stream);

               // using (writer)

                //{

                    //writer.WriteLine("Test 3: Update Visible Models\n\n");

                   // writer.WriteLine(DateTime.Now);

                 //   writer.Flush();

              //}

                updateVisibleModels();

     

                //TextWriter t3end = new StreamWriter(sFileName2);

                //t3end.WriteLine("Test 3: Update Visible Models END\n");

                //t3end.WriteLine(DateTime.Now);

                //TimeDifference3 = DateTime.Now - TimeNow3;

                //t3end.WriteLine("Execution time of updateVisibleModels in second:\n");

                //t3end.WriteLine(TimeDifference3.TotalSeconds);

                //t3end.Close();

     

                //using (StreamWriter writer = File.AppendText(sFileName))

                //{

                //    writer.WriteLine("Test 3: Update Visible Models END\n");

                //    writer.WriteLine(DateTime.Now);

                //    TimeDifference3 = DateTime.Now - TimeNow3;

                //    writer.WriteLine("Execution time of updateVisibleModels in second:\n");

                //    writer.WriteLine(TimeDifference3.TotalSeconds);

                //}

            }

     

     

     

    Dans tous les cas, ca marche pour la fonction public MainWindows qui est la fonction principale mais ca ne marche pas pour les autres fonctions comme celle ci-dessus.

    lundi 1 août 2011 13:11
  • Erreurs avec la methode 1 et 3: "Cannot write to a closed TextWriter." ou " A local variable named 'stream' is already defined in this scope"
    lundi 1 août 2011 13:16
  • Oui mon but est d'implementer un systeme de log afin de calculer le temps que met une fonction a s'executer. Le probleme est que les fonctions que je veux observer ne sont pas toutes au meme endroit...


    Bonjours

    Je vous propose une methode d'extension pour l'objet object, cette methode invoke la methode cible via reflection et meusure le temps emis pour s'executer à travers l'objet stopwatch de l'espqce nom System.Diagnistic voila le code

    using System;
    using System.Reflection;
    using System.Diagnostics;
    using System.Collections.Generic;
    
    namespace Extension
    {
      static public class ObjectExtension
      {
        static public TimeSpan MesurePeriodeExecution(this object o, Assembly assembly,string typeinstance,string methode, params object[] parametres)
        {
          Type t = assembly.GetType(typeinstance, true, true);
          List<Type> listetypes = new List<Type>();
          foreach (var item in parametres)
          {
            listetypes.Add(item.GetType());
          }
          object instance = Activator.CreateInstance(t);
          MethodInfo m = t.GetMethod(methode,listetypes.ToArray());
          Stopwatch stopWatch = new Stopwatch();
          if (m.IsStatic)
          {
            stopWatch.Start();
            m.Invoke(null, parametres);
            stopWatch.Stop();  
          }
          else 
          {
            stopWatch.Start();
            m.Invoke(instance, parametres);
            stopWatch.Stop();  
          }  
          return stopWatch.Elapsed;
        }
        
      }
    }
    


    Il suffit de l'implementer dans un assembly séparé et le referencer depuis votre assmbly. Dans ce cas toutes le methodes qui appartiennent au objects crees dans votre assembly seront cible de meusure. Vous allez remarquer la presence de

    MesurePeriodeExecution
    

      pour toutes les methodes

    Remarque:

    J'ai pris en consideration que les methodes statique et instances voud pouvez etendre le code pour inclure les autres types de methodes comme les metodes generiques par exmple

    Cordialement

    <br/>
    

     


    The complexity resides in the simplicity Follow me at: http://smartssolutions.blogspot.com
    lundi 1 août 2011 15:38
  • Bonjour,

    Pour avoir un fichier dans le répertoire de l'application, il suffit de retirer le chemin et de laisser juste le nom du fichier

    comme ceci:

     public static string logFileName = "test.log"; // variable globale utilisable partout

    fred
    lundi 1 août 2011 16:35
  • Bonjour,

    Si vous voulez calculer le temps d'execution d'une fonction, voila comment je ferais:

    using System;
    namespace cs_calcul_temps_execution
    {
     class Program
     {
      static void Main(string[] args)
      {
       DateTime depart = DateTime.Now;
       fonction();
       DateTime fin = DateTime.Now;
       Console.WriteLine("la fonction a mis " + (fin - depart).ToString() + " secondes");
       Console.ReadKey();
    
      }
      private static void fonction()
      {
       // faire quelque chose
      }
     }
    }
    



    fred
    lundi 1 août 2011 20:36
  • Bonjour, Camillep,

     

    Est-ce que vous avez pu avancer en utilisant les dernières informations fournies par MASNSN et Fred ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

     

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    mercredi 3 août 2011 06:41
  • Exemple de création d'un fichier et de ses répertoires sur le disque en combinant les classes
    Directory, Path et File :
    string cheminRep = @"d:\temp\rep1\fichier.txt";
    // création d'un répertoire et d'un sous-répertoire s'ils n'existent pas déjà
    if ( !Directory.Exists( Path.GetDirectoryName(cheminRep ) ) )
    Directory.CreateDirectory( Path.GetDirectoryName(cheminRep ) );
    jeudi 18 août 2011 01:29