您是否想知道如何轻松搜索大量文件或应对跨不同文件夹的文件内搜索的挑战?这篇文章有您正在寻找的答案。让我们深入了解文本搜索的世界,探索如何使用 C# 在不同文件夹中的不同文件中搜索各种文本或短语。

用于跨文件和文件夹扫描文本的 C# API

现在,我们将利用 GroupDocs.Search for .NET API 跨文件夹探索不同格式的文件中的大量文本。该库使我们能够系统地扫描各种文件格式的文本,例如 Word 文档、电子表格、演示文稿、PDF 文件、标记文件、电子书、电子邮件、One Note 文档和 ZIP 存档。有关支持的文件格式的详细列表,请参阅综合文档

您可以选择从 下载部分 获取 DLL 或 MSI 安装程序,也可以使用 NuGet 将 API 安装到您的 .NET 应用程序中。

PM> Install-Package GroupDocs.Search

使用 C# 跨文件夹搜索文件中的多个文本

按照以下步骤使用 C# 在多个文件夹内的多个文件中执行文本搜索,并为每个找到的文档生成突出显示的 HTML 输出文件。

  • 使用指定的索引文件夹路径创建 Index 对象。
  • 使用 Add 方法索引父文档文件夹。
  • 使用多个术语或短语定义搜索查询。
  • 使用搜索方法执行文本扫描并存储结果。
  • 迭代搜索结果:
    • 使用 GetFoundDocument 方法检索每个找到的文档。
    • 检索或打印找到的文档的任何文件信息。
    • 为所需的格式和路径设置 OutputAdapter
    • 为文档创建一个荧光笔
    • 使用Highlight 方法突出显示搜索结果并将其输出到HTML 文件。
// 使用 C# 在多个文件夹中的各种文件格式的多个文件中进行文本搜索

// 创建索引并从指定文件夹索引文档
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// 搜索包含单词“water”或“non”或短语“Lorem ipsum”的文档
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// 打印结果
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // 突出显示搜索结果
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences
}

上面的代码使您能够在多个文件中查找特定文本,并为每个找到的文档创建突出显示的 HTML 输出文件。

HTML 格式的突出显示文本搜索结果

打印文本搜索结果

从搜索查询的结果中,您可以进一步提取有关找到的文档的信息。

// 打印结果
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // 打印找到的术语
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // 打印找到的短语
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

以下是打印上述从 DOCX、PDF 和 TXT 文件中获得的搜索结果的输出:

Documents: 3
Total occurrences: 141
	Document: Lorem ipsum.docx
	Occurrences: 101
		Field: filename
		Occurrences: 101
			lorem ipsum		1
		Field: content
		Occurrences: 101
			non			94
			lorem ipsum		6
	Document: Lorem ipsum.pdf
	Occurrences: 1
		Field: filename
		Occurrences: 1
			lorem ipsum		1
	Document: English.txt
	Occurrences: 39
		Field: content
		Occurrences: 39
			water			39

完整代码

下面是完整的 C# 代码,用于集体搜索多个文件和文件夹中的文本字符串和短语:

// 使用 C# 在多个文件夹中的各种文件格式的多个文件中进行文本搜索

// 创建索引并从指定文件夹索引文档
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// 搜索包含单词“water”或“non”或短语“Lorem ipsum”的文档
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// 打印结果
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // 突出显示搜索结果
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // 打印找到的术语
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // 打印找到的短语
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

获取免费许可证或免费试用

免费许可证

获取免费临时许可证,不受限制地探索该库。

免费试用

您可以从下载部分下载免费试用版

用于在文件和文件夹中搜索的 .NET API

结论

在本文中,我们研究了文本扫描,以便使用 C# 在多个文件夹中的大量文件中搜索各种文本。从搜索查询开始,我们在多个文件和文件夹中进行探索,突出显示相应 HTML 文件中的搜索单词或短语。

有关 API 的全面详细信息,建议读者参考文档

任何询问或其他讨论都可以直接访问可用的论坛

也可以看看