最有效的方法(如果存在)在根目录下获取文件数组

tbhaxor

我想(递归地)在/Linux OS的根目录获取所有文件我正在使用以下代码

var files = System.IO.Directory.GetFiles("/", "*", SearchOption.AllDirectories);

但是它花费了太多时间,这使我的代码效率低下。有什么方法可以以更有效的方式递归查找文件?

我想到了这个答案,但再次花费的时间比System.IO.Directory.GetFiles()

塔马斯·凯斯凯梅蒂

我认为Matthew Watson是对的,由于光盘的影响,您所做的一切都会缓慢运行。我唯一想做的就是并行执行。如果在等待结果的同时还有其他事情要做,那么异步可能是个不错的选择。

using System;
using System.Threading.Tasks;
using System.IO;
using System.Collections.Concurrent;

namespace Test
{
    class Program
    {

    static void Main(string[] args)
    {
        GetFilesOnRoot("*");            
        Console.ReadLine();
    }

    private static ConcurrentBag<string> FilesBag;
    private static void GetFilesOnRoot(string filter)
    {
        FilesBag = new ConcurrentBag<string>();
        DirectoryInfo dirRoot = new DirectoryInfo("/");
        GetDirTree(dirRoot, "*");
    }

    private static void GetDirTree(DirectoryInfo dr, string filter)
    {
        FileInfo[] files = null;
        DirectoryInfo[] subDirs = null;
        try
        {
        files = dr.GetFiles(filter + ".*");
        }
        catch(Exception) { }        

        if (files != null)
        {
        Parallel.ForEach(files, (FileInfo item) => { FilesBag.Add(item.Name); });
        subDirs = dr.GetDirectories();
        Parallel.ForEach(subDirs, (DirectoryInfo item) => { GetDirTree(item,filter); });
        }
    }

    public static async Task GetFilesOnRootAsync(string filter)
    {
        await Task.Run(() => {
        GetFilesOnRoot(filter);
        });
    }

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

最有效的方法删除元素从数组列表?

对对象数组进行分组的最有效方法

将HTMLCollection转换为数组的最有效方法

检查NumPy数组中是否存在值的最有效方法是什么?

在numpy数组中查找模式的最有效方法

反转numpy数组的最有效方法

确定Python中目录大小的最有效方法

用Java扩展数组的最有效方法?

从数组删除的最有效方法?

从具有特定根目录的SQL表中获取最新分支的最有效方法是什么?

使用bash / aliases删除目录中grep文件的最有效方法

检查属性是否存在的最有效方法

基于两个numpy数组获取排序索引的最有效方法

以最有效的方式获取间隔期间的事件数

查找子目录路径的最有效方法

使用JavaScript和Regex从文件中获取XML标记的最有效方法

移动驻留在单个目录中的大量文件的最有效方法是什么?

比较Ruby中数组的最有效方法

最有效的方法来保存concat目录文件?

Rails-创建记录或更新记录(如果记录存在)的最有效方法是什么?

从Java中的数组制作直方图的最有效方法

增长数组C ++的最有效方法

在JavaScript中搜索数组映射的最有效方法

(AngularJS) 全局替换数组中值的最有效方法

搜索对象值数组的最有效方法

获取跟踪文件的 git repo 路径的最有效方法

在 JavaScript 中从没有文件名的文件路径中获取目录的最有效方法是什么?

删除表中所有记录(如果存在)的最有效方法

在numpy中比较数组的最有效方法?