更好的搜索所有文件中的字符串使用C# [英] Better Search for a string in all files using C#

查看:156
本文介绍了更好的搜索所有文件中的字符串使用C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

引用了很多博客和文章之后,我已经在下面的代码中搜索了一个文件夹内所有文件中的字符串。它在我的测试中工作正常。

QUESTIONS


  1. 对于这个(使用C#)?

  2. 是否有任何情况下会失败此代码?



<注意:我测试了很小的文件。
$ b

CODE

  static void Main()
{
string sourceFolder = @C:\Test;
字符串searchWord =.class1;

列表< string> allFiles = new List< string>();
AddFileNamesToList(sourceFolder,allFiles);
foreach(所有文件中的字符串文件名)
{
字符串内容= File.ReadAllText(fileName);
if(contents.Contains(searchWord))
{
Console.WriteLine(fileName);
}
}

Console.WriteLine();
System.Console.ReadKey();

$ b $ public static void AddFileNamesToList(string sourceDir,List< string> allFiles)
{

string [] fileEntries = Directory.GetFiles(sourceDir );
foreach(fileEntries中的字符串fileName)
{
allFiles.Add(fileName);


//递归
string [] subdirectoryEntries = Directory.GetDirectories(sourceDir);
foreach(subdirectoryEntries中的字符串项)
{
//避免重新分析点
if((File.GetAttributes(item)& FileAttributes.ReparsePoint)!= FileAttributes。 ReparsePoint)
{
AddFileNamesToList(item,allFiles);





$ b

参考


  1. stackoverflow.com/questions/13992508/splitting-a-string-with-two-criteria\">以两个条件分割字符串
  2. C#检测路径中的文件夹路口


  3. FolderBrowserDialog带重新分析点的SelectedPath ts

  4. C# - 高质量字节数组图像转换


解决方案

File.ReadAllText()更好的使用

  File.ReadLines(@C:\file.txt); 

它返回 IEnumerable 如果在到达文本文件的最后一行之前找到字符串,则不必读取整个文件。


After referring many blogs and articles, I have reached at the following code for searching for a string in all files inside a folder. It is working fine in my tests.

QUESTIONS

  1. Is there a faster approach for this (using C#)?
  2. Is there any scenario that will fail with this code?

Note: I tested with very small files. Also very few number of files.

CODE

static void Main()
    {
        string sourceFolder = @"C:\Test";
        string searchWord = ".class1";

        List<string> allFiles = new List<string>();
        AddFileNamesToList(sourceFolder, allFiles);
        foreach (string fileName in allFiles)
        {
            string contents = File.ReadAllText(fileName);
            if (contents.Contains(searchWord))
            {
                Console.WriteLine(fileName);
            }
        }

        Console.WriteLine(" ");
        System.Console.ReadKey();
    }

    public static void AddFileNamesToList(string sourceDir, List<string> allFiles)
    {

            string[] fileEntries = Directory.GetFiles(sourceDir);
            foreach (string fileName in fileEntries)
            {
                allFiles.Add(fileName);
            }

            //Recursion    
            string[] subdirectoryEntries = Directory.GetDirectories(sourceDir);
            foreach (string item in subdirectoryEntries)
            {
                // Avoid "reparse points"
                if ((File.GetAttributes(item) & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint)
                {
                    AddFileNamesToList(item, allFiles);
                }
            }

    }

REFERENCE

  1. Using StreamReader to check if a file contains a string
  2. Splitting a String with two criteria
  3. C# detect folder junctions in a path
  4. Detect Symbolic Links, Junction Points, Mount Points and Hard Links
  5. FolderBrowserDialog SelectedPath with reparse points
  6. C# - High Quality Byte Array Conversion of Images

解决方案

Instead of File.ReadAllText() better use

File.ReadLines(@"C:\file.txt");

It returns IEnumerable (yielded) so you will not have to read the whole file if your string is found before the last line of the text file is reached

这篇关于更好的搜索所有文件中的字符串使用C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆