我正在创建一个文件夹监视器,用于扫描文件夹以查找传入的 xml 文件。在文件夹中创建 xml 文件后,将解析该文件,解析后将其移动到“已处理”文件夹。现在有很多事情显然会出错,我希望能够以这种方式显示错误列表:
文件名 1 >> 错误
文件名 2 >> 错误
但我真的不知道从哪里开始。我应该用字符串/字符串对制作字典并将其显示在表格中吗?或者这里最好的选择是什么。我试过用谷歌搜索,但很难找到这样的例子。
提前致谢。
我正在创建一个文件夹监视器,用于扫描文件夹以查找传入的 xml 文件。在文件夹中创建 xml 文件后,将解析该文件,解析后将其移动到“已处理”文件夹。现在有很多事情显然会出错,我希望能够以这种方式显示错误列表:
文件名 1 >> 错误
文件名 2 >> 错误
但我真的不知道从哪里开始。我应该用字符串/字符串对制作字典并将其显示在表格中吗?或者这里最好的选择是什么。我试过用谷歌搜索,但很难找到这样的例子。
提前致谢。
正如您所说,您可以使用 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;
您可以使用 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 类的 Created 事件中使用您的记录器,如下所示:
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;
}
}
你真的应该考虑使用类似的东西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
已经可用的。它非常高效且可过滤,因此您可以获得所需的消息。