在Win10中的文件中查找字符串的安全方法

时间:2018-11-26 20:49:16

标签: .net full-text-search

我们使用的应用程序使用标记/p:ServerAddress="192.168.40.40" /p:ServerUser="YourmacRemoteSSHuser" 将配置字符串另存为XML。我正在编写一个备份脚本,该脚本需要知道所指向的数据库。我已经在不同计算机上的不同文件中找到了此字符串,具体取决于其安装方式。

首先,我尝试仅在资源管理器中使用Win10的搜索。无论我尝试哪种选项,都无法找到该字符串。我尝试在目录树中上下移动,甚至选择了文本文件所在的文件夹,但仍然找不到它。我已打开所有搜索选项,有什么想法吗?

但是我的主要问题是,现在是否存在用于在.Net中查找文件中字符串的规范解决方案?我在这里找到许多示例,但是它们通常使用外部带壳的实用程序,或者只是读取每个文件并进行搜索。一种有趣的解决方案是使用外部索引器,但这超出了该项目的范围。

1 个答案:

答案 0 :(得分:1)

简短的回答是。在C#中,没有规定的方法可以执行此操作,因为您的处理方式将根据您的用例而有所不同。但是,有很多选择可以执行这种类型的操作。

首先,让我们考虑一下,如果要搜索文件中的内容,则有时必须打开文件并查看其内容。您在上一段中提到了使用外部索引器的概念,它可以做到这一点。有趣的是,这与Windows Search要做的事情完全相同,因此,让我们从查看它开始。

执行Windows搜索时,它将使用搜索索引来查找文件。如果找不到要搜索的文件,则可能有一些原因。

  1. 搜索索引已完全禁用。
  2. 搜索索引未在包含配置文件的文件夹上运行。
  3. 搜索索引未配置为扫描具有配置扩展名的文件。

假设所有这些内容都已正确配置,则执行搜索时应该会看到结果。但是,在我的机器上执行connectionStrings的搜索时,我没有得到任何预期的web.config文件。进行更深入的研究时,Windows搜索仅配置为Index Properties Only个文件的.config而不是Index Properties and File Contents的文件。您可能不应该将这些文件也编入索引可能是出于安全方面的充分理由,但我将其留在另一篇文章中。

总的来说,我认为尝试使用Windows Search或其他库来执行此操作对于这样的基本任务来说是多余的。我假设以下情况。

  1. 您知道所有这些配置文件所在的常规位置(或父文件夹)。即使它们是嵌套的,您也可能位于每个配置文件的2-3级之内。
  2. 您知道要搜索的配置文件的扩展名,可以将其添加到白名单中。

假设您了解这两件事,查找和搜索文件的效率应该很好。您可能要遵循以下概述的模式。

  1. 选择根文件夹
  2. 列出当前文件夹中的文件。选择,然后选择具有与您的白名单匹配的扩展名的文件。
  3. 读取文件内容并查找您的字符串。您可以使用缓冲区来执行此操作,但是对于边缘情况(搜索项与缓冲区的边缘重叠),您将需要使用更复杂的逻辑。除非这些文件不只是配置文件,否则这不是必需的。
  4. 发现包含要执行搜索操作的搜索词的任何文件。
  5. 现在,在当前文件夹中扫描其他文件夹。递归处理每个文件夹,每次循环回到步骤2。

要增强此解决方案,您可以使用临时缓存,在其中跟踪发现需要备份的每个匹配文件。您可以将此缓存保存到文件中(带有时间戳),并且仅在设置的时间段后重新扫描。这样,在以后运行备份实用程序时,您实际上不必搜索仅备份文件的文件系统。

另一种选择是存储所有“误报”文件的黑名单,这样您以后就不会搜索文件内容了。

我希望这会有所帮助,如果您有任何疑问,请告诉我。