在表单的列表中显示文件名和错误

本文关键字:显示文件 文件名 错误 显示 表单 列表 | 更新日期: 2023-09-27 18:17:19

我正在创建一个文件夹监视器,用于扫描文件夹中传入的xml文件。当在文件夹中创建xml文件时,该文件将被解析,解析后将被移动到"已处理"的文件夹中。现在有很多事情显然可能出错,我希望能够以这种方式显示错误列表:

文件名1>>错误

文件名2>>错误

但是我真的不知道从哪里开始。我应该用字符串/字符串对创建一个字典,并在一个标签中显示它吗?或者什么是最好的选择。我试着谷歌一下,但是很难找到这样的例子。

在表单的列表中显示文件名和错误

您可以使用Enterprise Library进行日志记录,或者像这样创建您自己的Logger类:

public static class Logger
{
    public static List<Error> Logs = new List<Error>();
    public static void Log(Exception ex,string fileName)
    {
        Logs.Add(new Error
        {
            Message = ex.Message,
            FileName = fileName
        });
        //Here you can log errors to database,txt or xml too.
    }
}
public class Error
{
    public string Message { get; set; }
    public string FileName { get; set; }
}

并在FileSystemWatcher类中使用logger ' Created event:

void watcher_Created(object sender, FileSystemEventArgs e)
    {
        try
        {
            //Your logic
        }
        catch (Exception ex)
        {
            Logger.Log(ex, e.Name);
            //To show your logs in grid
            dataGridView.DataSource = null;
            dataGridView.DataSource = Logger.Logs;
        }
    }

正如你所说,你可以使用Dictionary然后放入数据表然后可能将其绑定到DataGrid,如:

        Dictionary<String, String> dict = new Dictionary<String,String>();
        dict.Add("Filename1","Error1");
        dict.Add("Filename2","Error2");
        dict.Add("Filename3","Error3");
        DataTable table = new DataTable();
        table.Columns.Add("Filename", typeof(String));
        table.Columns.Add("Error_Description", typeof(String));
        foreach (KeyValuePair<String,String> dictval in dict)
            {
                table.Rows.Add(dictval.Key, dictval.Value);
            }
        dataGridView1.DataSource = table;

您确实应该考虑使用log4net之类的东西来进行日志记录。可以在这里下载。它的结构非常简单。在您的app.config文件中,您可以将section标签添加到configSections标签,然后添加log4net配置标签。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="EventLogAppender" />
    </root>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <threshold value="DEBUG" />
      <applicationName value="Lantic YCS WebServer" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="(%-5level %date{hh}:%date{mm}:%date{ss} [%thread] %logger [%property{NDC}] ) %message %n" />
      </layout>
    </appender>
  </log4net>
</configuration>

然后在你的代码中你只需要初始化它,所以在这一行的每个类文件的顶部:

private static readonly ILog log = LogManager.GetLogger(typeof(Global));

允许你这样说:

log.Error(...);

,而且,当应用程序第一次启动时,不要忘记运行这一行:

log4net.Config.XmlConfigurator.Configure();

现在,来谈谈我个人的一个更有趣的问题。你说你正在构建一个文件夹监视器。你真的不想,或者不需要去建造它。请简单地使用已经可用的FileSystemWatcher。它非常高效,而且可以过滤,所以你可以得到你想要的消息。