2009-08-13 9 views
0

Ceci est un WinForm écrit en C#. Disons que je génère un fichier texte nommé aléatoire dans le répertoire que je sélectionne. Lorsque le bouton est cliqué la première fois, j'écris les données contenues dans les zones de texte dans ce fichier texte. Si l'utilisateur veut faire la même chose avec des données différentes dans les zones de texte, le clic sur le bouton devrait écrire les nouvelles données dans le fichier texte sans perdre les anciennes données. C'est comme garder des journaux, est-ce possible?Comment conserver les journaux en C#?

Mon code est comme:

private readonly Random setere = new Random(); 
    private const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    private string RandomString() 
    { 
     char[] buffer = new char[5]; 
     for (int i = 0; i < 5; i++) 
     { 
      buffer[i] = chars[setere.Next(chars.Length)]; 
     } 
     return new string(buffer); 
    } 




    private void button1_Click(object sender, EventArgs e) 
    { 


     DialogResult dia = MessageBox.Show("Wanna continue?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 


     if (dia == DialogResult.Yes) 
     { 
      StreamWriter wFile = new StreamWriter("C:\\Users\\Ece\\Documents\\Testings\\" + RandomString() + ".txt"); 
      wFile.WriteLine("Name Surname:" + text1.Text + text2.Text); 
      wFile.WriteLine("Other:" + text3.Text + text4.Text); 
      wFile.WriteLine("Money:" + textBox1.Text + " TL."); 
      wFile.WriteLine("*************************************"); 
      wFile.Close(); 



     } 
     else 
     { 

      return; 
     } 


    } 

Répondre

2

Jetez un oeil à l'aide de quelque chose comme ceci:

StreamWriter fw = new StreamWriter(@"C:\Logs\MyFile.txt",true); 
fw.WriteLine("Some Message" + Environment.Newline); 
fw.Flush(); 
fw.Close(); 

espoir qui aide. Voir MSDN StreamWriter pour plus d'informations

Mise à jour: Enlevé ancien exemple

Aussi, si vous essayez de créer un fichier unique, vous pouvez utiliser Path.GetRandomFileName() Encore une fois des MSDN Books:

Le La méthode GetRandomFileName renvoie une chaîne cryptographiquement forte, aléatoire pouvant être utilisée comme nom de dossier ou comme nom de fichier.

À JOUR: Ajout d'un exemple de classe Logger ci-dessous

Ajouter une nouvelle classe à votre projet et ajoutez les lignes suivantes (c'est 3.0 syntaxe de type que vous pourriez avoir à ajuster si la création d'un 2.0 Version)

using System; 
using System.IO; 

namespace LogProvider 
{ 
    // 
    // Example Logger Class 
    // 
    public class Logging 
    { 
     public static string LogDir { get; set; } 
     public static string LogFile { get; set; } 
     private static readonly Random setere = new Random(); 
     private const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     public Logging() { 
      LogDir = null; 
      LogFile = null; 
     } 

     public static string RandomFileName() 
     { 
      char[] buffer = new char[5]; 
      for (int i = 0; i < 5; i++) 
      { 
       buffer[i] = chars[setere.Next(chars.Length)]; 
      } 
      return new string(buffer); 
     } 


     public static void AddLog(String msg) 
     { 
      String tstamp = Convert.ToString(DateTime.Now.Day) + "/" + 
          Convert.ToString(DateTime.Now.Month) + "/" + 
          Convert.ToString(DateTime.Now.Year) + " " + 
          Convert.ToString(DateTime.Now.Hour) + ":" + 
          Convert.ToString(DateTime.Now.Minute) + ":" + 
          Convert.ToString(DateTime.Now.Second); 

      if(LogDir == null || LogFile == null) 
      { 
       throw new ArgumentException("Null arguments supplied"); 
      } 

      String logFile = LogDir + "\\" + LogFile; 
      String rmsg = tstamp + "," + msg; 

      StreamWriter sw = new StreamWriter(logFile, true); 
      sw.WriteLine(rmsg); 
      sw.Flush(); 
      sw.Close(); 
     } 
    } 
} 

Ajouter à votre forme d'événement onLoad

LogProvider.Logging.LogDir = "C:\\Users\\Ece\\Documents\\Testings"; 
LogProvider.Logging.LogFile = LogProvider.Logging.RandomFileName(); 

régler maintenant le bouton événement click pour être comme les suivantes:

DialogResult dia = MessageBox.Show("Wanna continue?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
if (dia == DialogResult.Yes) 
{ 
    StringBuilder logMsg = new StringBuilder(); 
    logMsg.Append("Name Surname:" + text1.Text + text2.Text + Environment.NewLine); 
    logMsg.Append("Other:" + text3.Text + text4.Text + Environment.NewLine); 
    logMsg.Append("Money:" + textBox1.Text + " TL." + Environment.NewLine); 
    logMsg.Append("*************************************" + Environment.NewLine); 
    LogProvider.Logging.AddLog(logMsg.ToString()); 
} else 
{ 
    return; 
} 

seulement Maintenant, vous devez créer un fichier pour tout le temps que l'application est en cours d'exécution et consignera que l'un fichier à chaque fois que vous cliquez sur le bouton .

+0

Je ne ai pas utilisé GetRandomFileName depuis que je suis obligé d'écrire une méthode moi-même .. Aussi je na pas obtenir ce qui a changé TRUE, il crée encore plusieurs fichiers au lieu d'écrire dans le fichier texte. –

+0

C'est en raison de la façon dont vous créez votre nom de fichier. Si vous êtes après seulement 1 fichier alors créez seulement un fichier unique la PREMIÈRE fois. – Wayne

6

Vous pouvez ajouter au texte dans le fichier.

Voir

File.AppendText

using (StreamWriter sw = File.AppendText(pathofFile)) 
     { 
      sw.WriteLine("This"); 
      sw.WriteLine("is Extra"); 
      sw.WriteLine("Text"); 
     } 

où PathOfFile est le chemin vers le fichier à ajouter à.

1

Vous pouvez jeter un oeil à log4net et RollingFileAppender

Questions connexes