c# 文件检索
2024-01-09 08:38:57
在C#中实现文件或文章内容的快速检索,通常会涉及文件系统操作、字符串搜索算法以及可能的数据结构优化。以下是一个简化的例子,展示如何使用C#对文本文件进行关键词检索:
using System;
using System.Collections.Generic;
using System.IO;
class FastTextSearch
{
// 定义一个方法来读取目录下所有文本文件的内容并存储到字典中(键为文件名,值为文件内容)
public static Dictionary<string, string> LoadAllTextFiles(string directoryPath)
{
var filesContent = new Dictionary<string, string>();
foreach (var filePath in Directory.GetFiles(directoryPath, "*.txt", SearchOption.AllDirectories))
{
try
{
string fileText = File.ReadAllText(filePath);
filesContent.Add(filePath, fileText);
}
catch (IOException ex)
{
Console.WriteLine($"无法读取文件 {filePath}:{ex.Message}");
}
}
return filesContent;
}
// 定义一个方法来搜索指定关键词在所有已加载文本中的位置
public static List<(string FilePath, int LineNumber)> SearchKeywords(Dictionary<string, string> textFiles, string keyword)
{
var results = new List<(string, int)>();
foreach (var (filePath, content) in textFiles)
{
var lines = content.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);
for (int lineNumber = 0; lineNumber < lines.Length; lineNumber++)
{
if (lines[lineNumber].IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
{
results.Add((filePath, lineNumber + 1)); // 行号从1开始计数
}
}
}
return results;
}
static void Main(string[] args)
{
string searchDirectory = @"C:\Your\Directory";
string keywordToSearch = "特定关键词";
var loadedFiles = LoadAllTextFiles(searchDirectory);
var searchResults = SearchKeywords(loadedFiles, keywordToSearch);
foreach (var result in searchResults)
{
Console.WriteLine($"关键词 '{keywordToSearch}' 在文件 {result.FilePath} 的第 {result.LineNumber} 行找到。");
}
}
}
上述代码首先定义了两个方法,LoadAllTextFiles
用于加载指定目录下的所有文本文件内容,并将它们存入字典中,方便后续检索;SearchKeywords
方法遍历字典中的每个文件内容,通过 IndexOf
函数查找关键词出现的位置,并记录下包含关键词的文件路径和行号。
请注意,为了实际应用中的性能考虑,针对大量数据的快速检索可能需要更高级的索引技术或采用现成的全文搜索引擎解决方案,如Lucene.NET等。此外,本示例未处理并发访问文件或异常等情况,请根据实际情况完善错误处理和资源管理。
文章来源:https://blog.csdn.net/wangyue4/article/details/135470616
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!