2009-08-13 55 views
0

這是用C#編寫的WinForm。 可以說我在我選擇的目錄中生成一個隨機命名的文本文件。當第一次點擊按鈕時,我將包含在文本框中的數據寫入該文本文件。如果用戶想用文本框中的不同數據做同樣的事情,那麼點擊按鈕應該將新數據寫入文本文件而不會丟失舊數據。這就像保持日誌,這可能嗎?如何在C#中保持日誌?

我的代碼是這樣的:

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


    } 

回答

2

看一看使用這樣的事情:

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

希望有所幫助。對於更新的詳細信息,

MSDN StreamWriter:刪除舊的例子

此外,如果你要創建一個唯一的文件,你可以從MSDN圖書使用Path.GetRandomFileName() 還是那句話:

的GetRandomFileName方法返回 加密性強,隨機 字符串,可用作 文件夾名稱或文件名。

修訂下面加

一個Logger類實例添加一個新類到您的項目,並添加以下代碼行(這是3.0類型的語法,所以你可能需要調整,如果創建一個2.0版本)

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

添加到您的形式onload事件

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

現在調整按鈕單擊事件是這樣的:

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

現在你應該僅用於應用程序運行,每次將記錄到一個文件,你點擊按鈕所處的整個時間創建一個文件。

+0

我沒有使用GetRandomFileName因爲我被要求寫一個方法自己..而且我沒有得到什麼是真正的改變,它仍然會創建多個文件,而不是寫作在一個文本文件中.. – 2009-08-13 11:27:47

+0

這是因爲你創建你的文件名的方式。如果你只有一個文件,那麼只能在第一次創建一個唯一的文件。 – Wayne 2009-08-13 12:15:05

6

您可以附加到文件中的文本。

File.AppendText

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

其中pathofFile是路徑文件追加到。

1

你可能想看看log4net和RollingFileAppender進行

相關問題