C#获取文件和文件名称

使用System.IO里的Directory类.这是一个静态类,所以不需要new就能直接使用。

1.Directory.GetFiles 方法

Directory.GetFiles是一个重载的方法。可以直接提供文件夹的路径获取所在目录中文件,返回一个文件全名的字符串数组。

2个参数的里面,第二参数可以使用*和?通配符实现模糊匹配查找文件。注意这个参数是不支持正则表达式匹配的方式。

三参数的时候,SearchOption 是表示指定是搜索当前目录,还是搜索当前目录及其所有子目录。其可用参数如下:

 

获取当前目录的所有文件名(不含子目录的文件)

using System;
using System.IO;

namespace 获取文件文件夹
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetFiles(path);
            Console.WriteLine($"根目录名:{path},含有文件数:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }         
            Console.ReadKey();
        }
    }
}

  

需要递归获取所有并包含子目录文件 只需要增加SearchOption参数即可。

using System;
using System.IO;

namespace 获取文件文件夹
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetFiles(path,"*",SearchOption.AllDirectories);
            Console.WriteLine($"根目录名:{path},含有文件数:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }         
            Console.ReadKey();
        }
    }
}

 

2.Directory.GetDirectories 方法

这也是和GetFiles类似的重载方法。只是返回满足指定条件的子目录的名称。

可以直接提供文件夹的路径获取所在路径的子目录名,返回一个文件夹名称路径的字符串数组。

2个参数的里面,第二参数可以使用*和?通配符实现模糊匹配查找文件。注意这个参数是不支持正则表达式匹配的方式。

三参数的时候,SearchOption 是表示指定是搜索当前目录,还是搜索当前目录及其所有子目录。其枚举参数和GetFiles的时候是一样的。

 获取当前目录的所有文件夹名(不含子目录)

using System;
using System.IO;

namespace 获取文件文件夹
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetDirectories(path);
            Console.WriteLine($"根目录名:{path},含有目录数:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }         
            Console.ReadKey();
        }
    }
}

需要递归获取所有子目录, 只需要增加SearchOption参数即可。 

using System;
using System.IO;

namespace 获取文件文件夹
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetDirectories(path,"*",SearchOption.AllDirectories);
            Console.WriteLine($"根目录名:{path},含有目录数:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }         
            Console.ReadKey();
        }
    }
}

要按照每个文件夹分类列举每个文件夹和其所含有的文件名称(不包含子目录文件).可以先设置SearchOptions参数获取所有的子目录。然后遍历每个子目录,只获取当前目录的所有文件,即可实现按文件夹分类列举文件。根目录的单独列出来即可。

using System;
using System.IO;

namespace 获取文件文件夹
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            string[] fls = Directory.GetFiles(path);
            Console.WriteLine($"根目录名:{path},含有文件数:{fls.Length}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }
            string[] flds = Directory.GetDirectories(path, "*", SearchOption.AllDirectories);

            foreach (string fld in flds)
            {
                string[] fs = Directory.GetFiles(fld);
                Console.WriteLine($"\n\n目录名:{fld},含有文件数:{fs.Length}");
                foreach (string f in fs)
                {
                    Console.WriteLine($"{f}");
                }
            }

            Console.ReadKey();
        }
    }
}

 

在官网里提到了:

 

 

这两个枚举文件方法的使用是和上面我提到的GetFiles/GetDirectories是一样的。 只是返回的结果是一个可枚举的集合而不是我们之前的字符串数组。具体我就不写了。

不用分类枚举文件和目录的话可以使用Directory.EnumerateFileSystemEntries.不管文件还是文件夹名都存入集合。该方法也是和前面用法差不多.设置SearchOption也可以获取所有子目录及子目录文件。下面只展示枚举根目录的所有文件/子目录(不递归查询子目录/文件)。

using System;
using System.Collections.Generic;
using System.IO;

namespace 获取文件文件夹
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"E:\111";
            List<string> fls =new  List<string>(Directory.EnumerateFileSystemEntries(path));
            Console.WriteLine($"根目录名:{path},含有文件目录数:{fls.Count}");
            foreach (string f in fls)
            {
                Console.WriteLine($"{f}");
            }

            Console.ReadKey();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_24499417/article/details/104965496