【发布时间】:2016-03-31 21:44:35
【问题描述】:
我正在使用 FileWatcher 将文件夹的所有更改记录到 XML 文件中
XDocument log = XDocument.Load(logpath);
XElement change = new XElement("change");
change.Add(new XAttribute("datetime", stamp));
change.Add(new XAttribute("status", "Deleted"));
change.Add(new XAttribute("filename", filepath));
log.Add(change);
log.Save(logpath);
然后,当我想查看某个时间戳所做的更改时,我使用
查询它var query = _filelog.Elements().Where(x => ((DateTime)x.Element("datetime")) <= time);
这只是 XElements 的 IEnumerable,使用起来不太方便。如何将其变成更方便的集合,例如键值对状态的字典列表:“已删除”等? XElement 中有不同数量的 XAttribute,具体取决于更改的类型。
此外,有没有办法查询每个文件名的最后更改直到时间戳,而不是每个更改直到并包括该点?
【问题讨论】:
-
如果上面的代码是你正在使用的实际代码,你正在构建的日志系统是非常无用和缓慢的。日志系统需要快速且永不失败 - 为每个日志条目加载和存储 xml 文件都不是,即使为了简单起见我们忘记了线程。最流行的日志库使用非结构化输出是有充分理由的:快速、可靠、适合流式传输
-
我很高兴地说,这可能是我第一次看到在一个句子中一起使用“XML 日志”这两个词。使用
XDocument已经很慢了。任何让事情变得更方便的事情只会让事情变得更慢。