C# 搜索文件中的文本

C# 搜索文件中的文本,c#,C#,如果我有很多文本文档,其中一个有我要找的单词。 那么,如何在所有文档中搜索? 像这样 FileStream File = new FileStream(@"C:\Users\user\Desktop\input\file1.txt", FileMode.Open, FileAccess.Read); StreamReader reader = new StreamReader(File); 我有file1

如果我有很多文本文档,其中一个有我要找的单词。 那么,如何在所有文档中搜索? 像这样

FileStream File = new FileStream(@"C:\Users\user\Desktop\input\file1.txt",
                                   FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(File);
我有file1,file2,…。

您需要按如下方式循环文件并搜索每个.txt文件:

string directory = @"C:\Users\user\Desktop\input";
string searchText ="Search text";

string[] allFiles = Directory.GetFiles(directory, "*.txt");

foreach (string file in allFiles)
{
    string[] lines = File.ReadAllLines(file);
    if(lines.Any(l => l.Contains(searchText)))
    {
        //It  means "Search text" is found in this file and do whatever you want
    }
}

首先生成要搜索的路径集合

如果这是同一目录中的文件1、文件2等,则这将起作用:

int numberOfFiles = //...
string word = //...
var filesThatContainWord = Enumerable.Range(1, numberOfFiles)
    .Select(i => $@"C:\Users\user\Desktop\input\file{i}.txt")
    .Where(path => File.ReadLines(path).Any(line => line.Contains(word));
File.ReadLines
Any
一起使用,好处是只读取每个文件,直到找到指定的单词

通过不将整个文件加载到内存中,它还可以节省内存

这可以封装到一个方法中:

IEnumerable<string> ContainsWord(IEnumerable<string> paths, string word)
    => paths.Where(path => File.ReadLines(path).Any(line => line.Contains(word));
您可以使用逐行读取文件。如果您有大文件,这可以减少内存消耗。 以下是示例代码:

    var searchText = "sometext";
    var directory = @"C:\Users\user\Desktop\input";
    foreach (var fileName in Directory.GetFiles(directory, "*.txt"))
    {
        using (var fileStream = File.OpenRead(fileName))
        {
            using (var streamReader = new StreamReader(fileStream))
            {
                string line;
                var lineNum = 1;
                while ((line = streamReader.ReadLine()) != null)
                {
                    if (line.Contains(searchText))
                    {
                        Console.WriteLine($"Found {searchText} at line {lineNum}");
                    }

                    lineNum++;
                }

            }
        }
    }

非常感谢你。
    var searchText = "sometext";
    var directory = @"C:\Users\user\Desktop\input";
    foreach (var fileName in Directory.GetFiles(directory, "*.txt"))
    {
        using (var fileStream = File.OpenRead(fileName))
        {
            using (var streamReader = new StreamReader(fileStream))
            {
                string line;
                var lineNum = 1;
                while ((line = streamReader.ReadLine()) != null)
                {
                    if (line.Contains(searchText))
                    {
                        Console.WriteLine($"Found {searchText} at line {lineNum}");
                    }

                    lineNum++;
                }

            }
        }
    }