当前位置: 首页 > article >正文

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);
            }
        }
    }
}

这两种方法用到的Directory.GetFiles()Directory.EnumerateFiles()函数都有多种重载版本,可以按照不同的指定条件获取目录下文件,示例中算是最简单的一种,不指定任何条件,就是获取所有文件。

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

EnumerateFiles和 GetFiles 方法的不同之处如下:使用 EnumerateFiles时,可以在返回整个集合之前开始枚举名称集合。 使用 GetFiles时,必须等待返回整个名称数组,然后才能访问数组。 因此,在使用许多文件和目录时, EnumerateFiles 可以更高效。
未缓存返回的集合;每次调用 GetEnumerator 集合上的 将启动一个新的枚举。

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

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


http://www.kler.cn/a/398914.html

相关文章:

  • Qt 每日面试题 -10
  • 游戏如何应对内存修改
  • 《C++设计模式:重塑游戏角色系统类结构的秘籍》
  • Vue通过file控件上传文件到Node服务器
  • 调用门提权
  • OpenTelemetry 赋能DevOps流程的可观测性革命
  • 自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展
  • 【黑马点评debug日记】redis登录跳转不成功
  • 操作系统学习笔记-5 传输层
  • Embedding的用法
  • SSDT Hook
  • 小程序-基于java+SpringBoot+Vue的校园失物招领系统设计与实现
  • outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务
  • TCP实现网络通信(多进程与多线程版本)
  • 正则表达式语法详解(python)
  • Area-Composition模型部署指南
  • vue 中使用rem布局
  • Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义
  • AB矩阵秩1乘法,列乘以行
  • AWD脚本编写_1
  • JQuery 基础知识学习(详尽版)2024.11.17
  • 内联函数与普通函数有什么区别?如何定义和使用内联函数?
  • Thinkphp6视图介绍
  • oracle19c开机自启动
  • 洛谷刷题日记||基础篇8
  • HarmonyOs DevEco Studio小技巧31--卡片的生命周期与卡片的开发