按日期查找目录中的文件

时间:2016-01-18 12:11:54

标签: c# .net linq

我们正在与外部帐户计划合作,该计划将“打印文档”保存在网络共享上。目录中的每个“打印文档”包含3个文件。

  • XML文件 - 包含有关谁打印文档等的信息
  • Datareport文件 - 包含报告布局文件的实际数据
  • 布局文件 - 报告布局

我们的客户在目录中有120,000个文件。

目前,当用户想要查看所有“打印文档”时,软件将循环目录中的所有文件,然后读取每个XML文件并查看报告是否针对此用户.......这需要每次10分钟阅读。

我们正在尝试创建更快的解决方案。

我能想到的唯一想法是循环文件并将内容(文件名,XML详细信息)放入数据库表并记录“上次扫描日期”。 下次我遍历文件时,我可以遍历并关闭任何小于“上次扫描日期”的项目或使用Linq查询!? (借自另一篇文章)

DateTime LastCreatedDate = Properties.Settings.Default["LastDateTime"].ToDateTime();
var filePaths = Directory.GetFiles(@"\\Printed\Reports\", "*_*.xml").Select(p => new {Path = p, Date = System.IO.File.GetLastWriteTime(p)})
    .OrderBy(x=>x.Date)
    .Where(x=>x.Date>=LastCreatedDate);

有更快的解决方案吗?

3 个答案:

答案 0 :(得分:1)

您可以设置Windows服务,检测该文件夹的添加内容,然后使用新条目更新数据库。此后,对打印文档的任何查询都将仅以数据库查询为代价。

答案 1 :(得分:0)

根据您的使用案例,看起来您要求的是拥有一个用户可以要求提供所有打印文档的系统。我没有看到日期是解决方案的一部分。

我可以想到多种快速解决方案:

  1. 为每个用户设置一个子目录。当新文件进入主目录时,将文件解析并复制到相应的用户子目录(允许文件与多个用户关联)。这样可以限制每个目录的文件数。
  2. 将文件映射到用户的映射(通过DB,平面XML文件或每个用户的平面XML文件)。然后使用每个新文件更新映射,同时还包含已经处理的文件列表,以便您不会重新处理该文件。
  3. 研究文档管理数据库,如果需要更强大的解决方案。如果您希望能够搜索许多不同类型的元数据,那么文档管理数据库将是一个好主意。
  4. 注意 - 对于创意1和2,您可以将新文件作为服务,任务或用户提出文档请求的一部分进行处理。

答案 2 :(得分:0)

也许是解析XML需要很长时间?你可以做一个基本的" grep"用户名/ id的所有文件,然后只对匹配的文件进行实际的XML解析。