这篇文章我们来看两种C#获取指定文件夹下所有文件的方法,先直观看一下示例代码,然后对这两种方法进行一下说明和对比。
方法一
using System;
namespace demo
{
class Demo
{
static void Main()
{
try
{
string path = "/path";
string[] filePathArray = Directory.GetFiles(path);
foreach (var filePath in filePathArray)
{
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))
{
string fileName = Path.GetFileName(filePath);
Console.WriteLine(fileName);
}
}
catch (Exception ex)
{
Console.WriteLine("Exception:{0}", ex.Message);
}
}
}
}
这两种方法看起来很像,其实底层逻辑区别很大,看一下官方文档的解释:
其实从函数名我们也能猜的差不多了,GetFiles是直接将全部文件加载到内存里,然后才可以访问,EnumerateFiles是对文件枚举,有了这个解释就基本可以确定猜想了。
所以对这些信息分析之后我们就可以认为,如果文件夹下有大量文件,GetFiles会出现性能问题,而且还会占用大量内存资源,甚至可能会因为内存溢出而导致程序崩溃,而因为EnumerateFiles是枚举这些文件,并且不会缓存,所以就可以避免产生和GetFiles同样的问题,这点需要注意。