按日期查找目录中的文件

本文关键字:文件 日期 查找 | 更新日期: 2023-09-27 18:30:52

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

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

我们有一个客户,他的目录中有 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);

有没有更快的解决方案?

按日期查找目录中的文件

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

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

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

  1. 为每个用户提供一个子目录。当新文件进入主目录时,将文件解析并复制到相应的用户子目录(允许将文件关联到多个用户)。这样做的好处是可以限制每个目录的文件数。
  2. 具有将文件映射到用户的映射(通过数据库、平面 XML 文件或每个用户的平面 XML 文件)。然后使用每个新文件更新映射,同时还包含已处理的文件列表,以便您不会重新处理该文件。
  3. 研究文档管理数据库,如果需要更强大的解决方案。如果您希望能够搜索许多不同类型的元数据,那么文档管理数据库将是一个好主意。

注意 - 对于想法 1 和 2,您可以将新文件作为服务、任务的一部分或在用户发出文档请求时进行处理。

也许是 XML 的解析需要很长时间? 您可以对用户名/ID 的所有文件执行基本的"grep",然后仅对匹配的文件进行实际的 XML 解析。