C# 遍历文件夹子目录下所有图片及遍历文件夹下的文件

yizhihongxing

C# 中遍历文件夹和子目录很常见,本文就详细讲解如何使用 C# 遍历文件夹中的文件以及子目录中的文件,同时只选择图片文件。

遍历文件夹中的所有图片文件

方法一:使用 Directory.GetFiles

Directory.GetFiles() 方法返回指定路径下的所有文件,可以通过 fileName.Contains(".jpg") 和 fileName.Contains(".png") 来过滤出图片。

using System.IO;

// 文件夹路径
string folderPath = @"C:\Temp\Images\";

// 获取文件夹下符合格式的所有图片
string[] files = Directory.GetFiles(folderPath, "*.*", SearchOption.TopDirectoryOnly)
                         .Where(file => file.ToLower().EndsWith(".jpg") || file.ToLower().EndsWith(".png")).ToArray();

foreach (string file in files)
{
    // 处理文件逻辑
}

上述代码中,folderPath 是文件夹路径,files 变量是存储所有图片文件路径的 string 数组。其中,使用 ToLower() 方法来将文件路径中的所有字符转换为小写字符,如果不进行转换,可能会导致判断图片文件格式失败。

方法二:使用 Directory.EnumerateFiles

Directory.GetFiles() 返回的是一个数组,如果文件数量很多或者文件较大,返回数组会占用很大的内存,一次性获取所有文件不适用于性能较差的小型设备。此时可以使用 Directory.EnumerateFiles(),它采用延迟加载的方式,只有当遍历到某个文件时才会将这个文件加载到内存中。使用代码如下:

using System.IO;

// 文件夹路径
string folderPath = @"C:\Temp\Images\";

// 获取文件夹下符合格式的所有图片
IEnumerable<string> files = Directory.EnumerateFiles(folderPath, "*.*", SearchOption.TopDirectoryOnly)
            .Where(file => file.ToLower().EndsWith(".jpg") || file.ToLower().EndsWith(".png"));

foreach (string file in files)
{
    // 处理文件逻辑
}

遍历文件夹及子目录下所有图片文件

C# 中遍历文件夹及子目录下所有文件,可以使用 Directory.GetFileSystemEntries() 和 Directory.EnumerateFileSystemEntries() 方法。具体代码如下:

using System.IO;

// 文件夹路径
string folderPath = @"C:\Temp\Images\";

// 获取文件夹及子目录下符合格式的所有图片
string[] files = Directory.GetFileSystemEntries(folderPath, "*.*", SearchOption.AllDirectories)
                         .Where(file => file.ToLower().EndsWith(".jpg") || file.ToLower().EndsWith(".png")).ToArray();

foreach (string file in files)
{
    // 处理文件逻辑
}

上述代码中,GetFileSystemEntries() 方法可以递归获取文件夹中的所有子目录和子文件夹,Where() 方法可以过滤出所有图片文件。

下面是另一个使用 Directory.EnumerateFileSystemEntries() 的示例:

using System.IO;

// 文件夹路径
string folderPath = @"C:\Temp\Images\";

// 获取文件夹及子目录下符合格式的所有图片
IEnumerable<string> files = Directory.EnumerateFileSystemEntries(folderPath, "*.*", SearchOption.AllDirectories)
                         .Where(file => file.ToLower().EndsWith(".jpg") || file.ToLower().EndsWith(".png"));

foreach (string file in files)
{
    // 处理文件逻辑
}

总结

本文主要介绍了 C# 如何遍历文件夹及子目录下所有图片文件,使用 Directory.GetFiles() 或 Directory.EnumerateFiles() 方法都可以实现遍历文件夹功能,其中 Directory.GetFiles() 适合数据量较小的场景,而 Directory.EnumerateFiles() 则适用于数据量较大的场景。最后提醒:尽量使用延迟加载来规避内存消耗问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 遍历文件夹子目录下所有图片及遍历文件夹下的文件 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#把数组中的某个元素取出来放到第一个位置的实现方法

    C#中可以使用数组索引来访问数组元素。要把数组中的某个元素取出来放到第一个位置,我们可以使用以下步骤: 使用数组索引找到要提取的元素。 使用for循环或Array.Copy方法将剩余元素向后移动一个位置。 把提取元素放到数组的第一个位置。 下面是两个示例,展示了如何实现这个过程: 示例一:使用for循环实现 int[] arr = { 1, 2, 3, 4,…

    C# 2023年6月1日
    00
  • 轻松学习C#的foreach迭代语句

    当我们需要遍历数组、集合或者其他集合类的数据时,就需要使用foreach迭代语句。在C#中,foreach语句是用于迭代访问集合(数组、字符串或其他集合类型)中的每个元素的最简单的方法之一。下面是一些关于使用foreach语句进行迭代的技巧和示例: 1. foreach语句语法格式 C#中foreach的语法非常简单。下面是foreach语法的信息: for…

    C# 2023年6月1日
    00
  • 深入Unix时间戳与C# DateTime时间类型互换的详解

    下面我将详细讲解“深入Unix时间戳与C# DateTime时间类型互换的详解”这一主题。 1. Unix时间戳 Unix时间戳是记录时间的一种方式,它指的是从1970年1月1日00:00:00以来经过的秒数。在Unix系统中,时间戳被广泛使用,它只表示时间大小,并不涉及时区等信息。 1.1 将Unix时间戳转换为C# DateTime类型 在C#中,我们可…

    C# 2023年6月1日
    00
  • c#创建浮动工具栏功能示例

    下面是关于“c#创建浮动工具栏功能示例”的完整攻略: 1. 理解浮动工具栏 浮动工具栏指的是一类在应用程序中可以自由移动的控件集合。在 C# 语言中,我们可以使用菜单和工具栏的组合来实现浮动工具栏的功能。 在实现浮动工具栏前,我们需要做以下准备工作: 在代码中创建菜单栏和工具栏,并设置相应的点击事件程序; 构建浮动工具栏并将其放置在应用程序窗口中。 下面,我…

    C# 2023年6月3日
    00
  • 最详细的ASP.NET微信JS-SDK支付代码

    标题:ASP.NET微信JS-SDK支付代码攻略 概述 微信JS-SDK是微信公众号开发中常用的一种技术手段,可以集成微信支付,让用户能够在微信中完成支付操作。本文将详细介绍如何在ASP.NET中使用微信JS-SDK完成支付操作,并且提供代码示例。 步骤 步骤一:获取微信支付授权 在使用微信JS-SDK进行支付之前,需要先获取微信支付的授权。具体方式如下: …

    C# 2023年5月31日
    00
  • C# Linq的Average()方法 – 计算序列中元素的平均值

    C#中的“Language-Integrated Query”(简称:Linq)是一种强大的查询技术,它提供了一种方便、快速、灵活的方法来查询各种数据源。Linq中有许多方法,其中一个非常常用的方法就是Average()。下面就让我们来详细了解一下Average()方法的使用和实现。 方法概述 Average()方法可以用于计算一个序列的平均数,支持对整数、…

    C# 2023年4月19日
    00
  • C#多线程之线程池ThreadPool详解

    C#多线程之线程池ThreadPool详解 简介 线程池是一种使用共享资源(线程)的方式,它在系统中维护着一定数量的线程,在任务到来时将其分配给线程执行,执行完毕后线程归还给线程池,以便其他任务使用。线程池采用的是池化思想,能够避免频繁创建和销毁线程造成的资源浪费,提高程序性能。在C#中,我们可以使用ThreadPool类实现线程池的功能。 线程池的优点 线…

    C# 2023年6月6日
    00
  • 轻松学习C#的String类

    轻松学习C#的String类 在C#中,我们经常使用String类来处理字符串。它提供了一系列的方法来处理字符串,使我们的编程工作更加方便和高效。下面是一些学习 String 类的攻略,希望你能从中受益。 创建字符串 在C#中,创建字符串的方法有多种。下面介绍一些常用的方式。 直接赋值 使用字符串字面量来直接赋值字符串。 string str1 = &quo…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部