Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要建议,以改善文件内容搜索程序,我正在编写使用ASP.NET核心_C#_Asp.net_Asp.net Core_Io_Console Application - Fatal编程技术网

C# 需要建议,以改善文件内容搜索程序,我正在编写使用ASP.NET核心

C# 需要建议,以改善文件内容搜索程序,我正在编写使用ASP.NET核心,c#,asp.net,asp.net-core,io,console-application,C#,Asp.net,Asp.net Core,Io,Console Application,我正在编写一个采用以下参数的控制台程序- 目录路径 文件扩展名 “yyyy-mm-dd”格式的搜索日期 搜索文本 它搜索给定目录(param 1)中具有特定扩展名(param 2)的所有xml文件,其中包含修改日期(param 3)和文本(param 4) 目标目录目前大约有55000个xml文件 如何提高该计划的性能 对可能出现的问题有何评论 更新代码以反映Ashkan响应中的更改,而不是检查文件名上的日期与实际文件写入日期的比较。还添加了try-catch块 下面是我在ASP.NETCore

我正在编写一个采用以下参数的控制台程序-

  • 目录路径
  • 文件扩展名
  • “yyyy-mm-dd”格式的搜索日期
  • 搜索文本
  • 它搜索给定目录(param 1)中具有特定扩展名(param 2)的所有xml文件,其中包含修改日期(param 3)和文本(param 4)

    目标目录目前大约有55000个xml文件

    如何提高该计划的性能

    对可能出现的问题有何评论

    更新代码以反映Ashkan响应中的更改,而不是检查文件名上的日期与实际文件写入日期的比较。还添加了try-catch块

    下面是我在ASP.NETCore2.2中编写的程序

    try
    {
        var dirPath = args[0];
        var fileExtension = args[1];
        var searchDate = args[2];
        var searchText = args[3];
    
        DirectoryInfo dir = new DirectoryInfo(dirPath);
    
        IEnumerable<FileInfo> filelist = dir.GetFiles(fileExtension, SearchOption.AllDirectories)
                                            .Where(file => file.LastWriteTime.ToString("yyyy-MM-dd") == searchDate);
    
        var foundFilesCtr = 0;
    
        Console.WriteLine($"Searching for {searchText} in {dir}");
        Console.WriteLine("------------------------------------");
        Console.WriteLine("Search results...");
        Console.WriteLine($"Found {filelist.Count()} files with extenstion {fileExtension} and dated {searchDate}");
    
        foreach (var item in filelist)
            if (File.ReadAllLines(item.FullName).Contains(searchText))
            {
                Console.WriteLine($"File with selected content: {item.FullName}");
                foundFilesCtr++;
            }
    
        Console.WriteLine($"Found {foundFilesCtr} files with text {searchText}");
        Console.WriteLine("------------------------------------");
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.InnerException);
    }
    
    试试看
    {
    var dirPath=args[0];
    var fileExtension=args[1];
    var searchDate=args[2];
    var searchText=args[3];
    DirectoryInfo dir=新的DirectoryInfo(dirPath);
    IEnumerable filelist=dir.GetFiles(文件扩展名,SearchOption.AllDirectories)
    .Where(file=>file.LastWriteTime.ToString(“yyyy-MM-dd”)==searchDate);
    var foundFilesCtr=0;
    WriteLine($“在{dir}中搜索{searchText}”);
    Console.WriteLine(“---------------------------------------”;
    控制台。WriteLine(“搜索结果…”);
    WriteLine($“找到了{filelist.Count()}个文件,扩展名为{fileExtension},日期为{searchDate}”);
    foreach(文件列表中的变量项)
    if(File.ReadAllLines(item.FullName).Contains(searchText))
    {
    WriteLine($”文件,所选内容:{item.FullName});
    foundFilesCtr++;
    }
    WriteLine($“找到了{foundFilesCtr}个文本为{searchText}的文件”;
    Console.WriteLine(“---------------------------------------”;
    }
    捕获(例外情况除外)
    {
    Console.WriteLine(例如InnerException);
    }
    
    1.与其获取所有文件并对其进行筛选,不如仅获取具有给定扩展名的文件:

    string[] filelist = Directory.GetFiles(fileExtension ,SearchOption.AllDirectories)
               .Where(file => Path.GetFilenameWithoutExtension.Contains(searchDate).ToArray();
    
    2.虽然文件是XML,但您将其视为字符串(
    xdoc.Document.ToString().Contains(searchText)
    ),因此只需将其作为字符串加载即可节省XML文档加载时间:

    foreach(var file in files)
        if(File.ReadAllText(file).Contains(searchText))
            foundFilesCtr++;
    

    异步循环如何异步循环?