【问题标题】:Search MS Word binary file for specific content在 MS Word 二进制文件中搜索特定内容
【发布时间】:2011-07-08 18:16:03
【问题描述】:

我的数据库中存储了一些 .doc 二进制文件,现在我想全部搜索它们(不将它们转换为 .doc)以查看哪个包含例如“hello”一词。

有没有办法在二进制文件中进行这种搜索?

【问题讨论】:

    标签: vb.net file search binary ms-word


    【解决方案1】:

    您可以选择使用商业工具。 Aspose.Words 可以从流中加载文档,并具有各种在文档中查找文本的方法。

    如果您有来自数据库的流,那么您的代码将如下所示:

    Aspose.Words.Document doc = new Aspose.Words.Document(streamObjectFromDatabase);
    
    if (doc.GetText().ToLower().Contains("hello world"))
      MessageBox.Show("Hello World exists");
    

    注意:这个工具的好处是它不需要安装 Word 对象,它可以处理内存中的流。

    【讨论】:

    • 我确实在同一个项目的其他任务中使用 Aspose Words,我知道我可以通过这种方式完成工作。唯一的问题是我有很多很多 .doc 文件。即使算上使用 Aspose 我可以比使用 MS Word Object 更快地逐个打开和搜索这一事实,它仍然不是一个很好的方法。我想要的是直接在二进制文件中搜索,而不必以任何方式打开它。
    • 你想完成什么?您是否正在尝试构建跨文档的搜索功能?您可以一次提取文本并将其存储在数据库的文本字段中,然后搜索该文本字段。
    【解决方案2】:

    据我所知,并非没有很多痛苦。根据Wikipedia 的说法,微软在过去几年中终于发布了.doc 规范。因此,如果您有时间,您可以根据规范创建一个解析器,假设您的所有文档都采用相同版本的 .doc 格式。

    当然,您可以在所有二进制数据中搜索您要查找的文本,假设实际文本存储为纯文本。但是即使这个假设是正确的,你怎么能确定你找到的纯文本是实际的文档文本,而不是一些也以纯文本形式存储的文档元数据呢?而且二进制数据与您的文本模式匹配的可能性总是很小。

    如果您可以使用 Word 库,我会走这条路。如果没有,国产解析器可能是您最不坏的选择。

    【讨论】:

    • Word 库不是一个选项,正如我在上面的评论中所说,我已经将它们替换为 Aspose 以完成我需要完成的其他任务。您在直接搜索二进制文件时描述的问题正是我确定的问题以及我在此处发布的原因,我开始认为由于 MS Word 加密,我真的无法直接在二进制文件中搜索。你说微软发布了有关 Word 如何加密其文档的信息?你用过它吗?
    • 不,我从未使用过 .doc 格式,我只是读过它。有一次我曾短暂地考虑过直接使用 RTF 作为使用 Word 功能的后门方式,并决定反对它,因为规范太复杂而无法在我的项目时间范围内工作。我认为 .doc 规范要复杂得多。不过,我不知道它实际上是加密的。二进制数据更有可能遵循某种编码方案,如果你有算法,你可以解析这些方案。
    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2014-11-02
    • 2014-12-14
    • 1970-01-01
    相关资源
    最近更新 更多