如何保存C#中的日志?

时间:2009-08-13 11:09:51

标签: c# logging

这是一个用C#编写的WinForm。 假设我在我选择的目录中生成一个随机命名的文本文件。当第一次单击该按钮时,我将文本框中包含的数据写入该文本文件。如果用户想要对文本框中的不同数据执行相同的操作,则单击按钮应将新数据写入文本文件而不会丢失旧数据。就像保存日志一样,这可能吗?

我的代码就像:

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


    }

4 个答案:

答案 0 :(得分:6)

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

File.AppendText

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

其中pathofFile是要追加到的文件的路径。

答案 1 :(得分:2)

看看使用这样的东西:

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

希望有所帮助。有关详细信息,请参阅MSDN StreamWriter

更新:删除旧示例

此外,如果您尝试创建唯一文件,则可以使用Path.GetRandomFileName() 再次来自MSDN Books:

  

GetRandomFileName方法返回一个   密码学强,随机   可以用作a的字符串   文件夹名称或文件名。

更新在下方添加了一个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;
}

现在,您应该只在应用程序运行的整个时间内创建一个文件,并且每次单击按钮时都会记录到该文件。

答案 2 :(得分:1)

您可能需要查看log4net和RollingFileAppender

答案 3 :(得分:0)

不确定。只需打开文件即可附加System.IO.File.AppendText

之类的内容