您好,欢迎来到九壹网。
搜索
您的当前位置:首页C#获取指定文件夹下所有文件的两种方式(使用Directory.GetFiles()和Directory.EnumerateFiles()函数)及其区别

C#获取指定文件夹下所有文件的两种方式(使用Directory.GetFiles()和Directory.EnumerateFiles()函数)及其区别

来源:九壹网

这篇文章我们来看两种C#获取指定文件夹下所有文件的方法,先直观看一下示例代码,然后对这两种方法进行一下说明和对比。

方法一

using System;

namespace demo
{
    class Demo
    {
        static void Main()
        {
            try
            {
                string path = "/path";//注意修改
                
                string[] filePathArray = Directory.GetFiles(path);
                
                foreach (var filePath in filePathArray)
                {
                    //filePath是文件绝对路径,想要获取我们平时所说的文件名还要解析一下,比如使用Path.GetFileName()获取
                    string fileName = Path.GetFileName(filePath);
                    
                    Console.WriteLine(fileName);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception:{0}", ex.Message);
            }
        }
    }
}

方法二

using System;

namespace demo
{
    class Demo
    {
        static void Main()
        {
            try
            {
                string path = "/path";//注意修改
                
                foreach (var filePath in Directory.EnumerateFiles(path))
                {
                    //filePath是文件绝对路径,想要获取我们平时所说的文件名还要解析一下,比如使用Path.GetFileName()获取
                    string fileName = Path.GetFileName(filePath);
                    
                    Console.WriteLine(fileName);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception:{0}", ex.Message);
            }
        }
    }
}

这两种方法看起来很像,其实底层逻辑区别很大,看一下官方文档的解释:

其实从函数名我们也能猜的差不多了,GetFiles是直接将全部文件加载到内存里,然后才可以访问,EnumerateFiles是对文件枚举,有了这个解释就基本可以确定猜想了。

所以对这些信息分析之后我们就可以认为,如果文件夹下有大量文件,GetFiles会出现性能问题,而且还会占用大量内存资源,甚至可能会因为内存溢出而导致程序崩溃,而因为EnumerateFiles是枚举这些文件,并且不会缓存,所以就可以避免产生和GetFiles同样的问题,这点需要注意。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务