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

.net 在Win10中查找文件中字符串的安全方法,.net,full-text-search,.net,Full Text Search,我们使用的应用程序将配置字符串保存为带有标记的XML。我正在编写一个备份脚本,需要知道指向的数据库。我在不同机器上的不同文件中发现了这个字符串,具体取决于它的安装方式 首先,我尝试在资源管理器中简单地使用Win10的搜索。无论我尝试什么选项,都无法找到字符串。我试着在目录树上走来走去,甚至选择了文本文件所在的文件夹,但它仍然找不到。我打开了所有的搜索选项,有什么想法吗 但我的主要问题是,现在是否有一个在.Net中查找文件中字符串的规范解决方案?我在这里找到了许多示例,但它们通常使用外部外壳实用程

我们使用的应用程序将配置字符串保存为带有标记的XML。我正在编写一个备份脚本,需要知道指向的数据库。我在不同机器上的不同文件中发现了这个字符串,具体取决于它的安装方式

首先,我尝试在资源管理器中简单地使用Win10的搜索。无论我尝试什么选项,都无法找到字符串。我试着在目录树上走来走去,甚至选择了文本文件所在的文件夹,但它仍然找不到。我打开了所有的搜索选项,有什么想法吗

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

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

开始,让我们考虑一下,如果我们想在一个文件中搜索内容,在某个时候,我们必须打开文件并查看它的内容。您在上一段中提到了使用外部索引器的概念,这正是要做到的。有趣的是,这正是Windows Search将要做的事情,所以让我们从这一点开始

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

搜索索引已完全禁用。 未在包含配置文件的文件夹上运行搜索索引。 搜索索引未配置为扫描具有配置扩展名的文件。 假设所有这些配置都正确,那么在执行搜索时应该会看到结果。但是,在我的计算机上搜索ConnectionString时,我没有得到任何预期的web.config文件。深入挖掘时,Windows Search仅配置为仅为.config文件索引属性,而不是索引属性和文件内容。也许有一个很好的安全理由可以解释为什么你不应该为这些文件编制索引,但我将把它留给另一篇文章

但总的来说,我认为尝试使用Windows Search或其他库来完成这项任务对于这样一项基本任务来说是过分的。我假设如下

您知道所有这些配置文件所在的常规位置或父文件夹。即使它们是嵌套的,您也可能在每个配置文件的2-3个级别内。 您知道要搜索的配置文件的扩展名,可以将其添加到白名单中。 假设您知道这两件事,那么查找和搜索文件的效率应该很高。您可能希望遵循下面概述的模式

选择根文件夹 列出当前文件夹中的文件。选择扩展名与白名单匹配的文件。 读取文件内容并查找字符串。您可以使用缓冲区来实现这一点,但对于搜索项与缓冲区边缘重叠的边缘情况,您需要有更复杂的逻辑。除非这些不仅仅是配置文件,否则这是不必要的。 找到任何包含您执行所需操作的搜索词的文件。 现在,扫描当前文件夹以查找其他文件夹。递归地处理每个文件夹,每次循环回步骤2。 要增强此解决方案,可以使用临时缓存,在其中跟踪找到的每个需要备份的匹配文件。您可以将此缓存与时间戳一起保存到文件中,并且只能在设置的时间段后重新扫描。这样,对于备份实用程序的后续运行,实际上不必搜索文件系统,只需备份文件即可

另一种选择是存储所有误报文件的黑名单,这样您就不会在将来的运行中搜索文件的内容


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

Superfeel post Shawn。我会消化的。。。但看起来我只是在可能的位置使用文件搜索,然后使用MS的XML来解析它。听起来很棒!这些是什么类型的配置文件?典型的web.config或app.config文件?或者这些是自定义XML配置?Web.config。它从一个客户端指向一个应用服务器指向一个数据库,我的目标是备份这个数据库。看看这个例子,看看如何在C中找到web.config后加载它。这是从中读取数据的最简单方法。