C# 第七章『I/O数据流』◆第3节:Directory类、DirectoryInfo类、遍历文件夹

        一、Directory类

Directory 类https://docs.microsoft.com/zh-cn/dotnet/api/system.io.directory?view=netframework-4.0

        1、定义

        公开用于通过目录和子目录进行创建、移动和枚举的静态方法。 此类不能被继承。

  • 命名空间:System.IO
  • 程序集:mscorlib.dll
  • 继承:Object→Directory
  • 属性:ComVisibleAttribute
[System.Runtime.InteropServices.ComVisible(true)]
public static class Directory

        将 Directory 类用于典型的操作,例如复制、移动、重命名、创建和删除目录。

        2、Directory 类的方法

CreateDirectory(String) 在指定路径中创建所有目录和子目录,除非它们已经存在。
CreateDirectory(String, DirectorySecurity) 在指定路径中创建所有目录(除非已存在),并应用指定的 Windows 安全性。
Delete(String) 从指定路径删除空目录。
Delete(String, Boolean) 删除指定的目录,并删除该目录中的所有子目录和文件(如果表示)。
EnumerateDirectories(String) 返回指定路径中的目录完整名称的可枚举集合。
EnumerateDirectories(String, String) 返回指定路径中与搜索模式匹配的目录完整名称的可枚举集合。
EnumerateDirectories(String, String, SearchOption) 返回指定路径中与搜索模式匹配的目录完整名称的可枚举集合,还可搜索子目录。
EnumerateFiles(String) 返回指定路径中的完整文件名的可枚举集合。
EnumerateFiles(String, String) 返回指定路径中与搜索模式匹配的完整文件名的可枚举集合。
EnumerateFiles(String, String, SearchOption) 返回指定路径中与搜索模式匹配的完整文件名的可枚举集合,还可以搜索子目录。
EnumerateFileSystemEntries(String) 返回指定路径中的文件名和目录名的可枚举集合。
EnumerateFileSystemEntries(String, String) 返回指定路径中与搜索模式匹配的文件名和目录名的可枚举集合。
EnumerateFileSystemEntries(String, String, SearchOption) 返回指定路径中与搜索模式匹配的文件名称和目录名的可枚举集合,还可以搜索子目录。
Exists(String) 确定给定路径是否引用磁盘上的现有目录。
GetAccessControl(String) 获取 DirectorySecurity 对象,该对象封装指定目录的访问控制列表 (ACL) 项。
GetAccessControl(String, AccessControlSections) 获取一个 DirectorySecurity 对象,它封装指定目录的指定类型的访问控制列表 (ACL) 条目。
GetCreationTime(String) 获取目录的创建日期和时间。
GetCreationTimeUtc(String) 获取目录创建的日期和时间,其格式为协调通用时 (UTC)。
GetCurrentDirectory() 获取应用程序的当前工作目录。
GetDirectories(String) 返回指定目录中的子目录的名称(包括其路径)。
GetDirectories(String, String) 返回指定目录中与指定的搜索模式匹配的子目录的名称(包括其路径)。
GetDirectories(String, String, SearchOption) 返回与在指定目录中的指定搜索模式匹配的子目录的名称(包括其路径),还可以选择地搜索子目录。
GetDirectoryRoot(String) 返回指定路径的卷信息、根信息或两者同时返回。
GetFiles(String) 返回指定目录中文件的名称(包括其路径)。
GetFiles(String, String) 返回指定目录中与指定的搜索模式匹配的文件的名称(包含其路径)。
GetFiles(String, String, SearchOption) 返回指定目录中与指定的搜索模式匹配的文件的名称(包含其路径),使用某个值确定是否要搜索子目录。
GetFileSystemEntries(String) 返回指定路径中的所有文件和子目录的名称。
GetFileSystemEntries(String, String) 返回一个数组,其中包含与指定路径中的搜索模式相匹配的文件名和目录名称。
GetFileSystemEntries(String, String, SearchOption) 返回指定路径中与搜索模式匹配的所有文件名和目录名的数组,还可以搜索子目录。
GetLastAccessTime(String) 返回上次访问指定文件或目录的日期和时间。
GetLastAccessTimeUtc(String) 返回上次访问指定文件或目录的日期和时间,其格式为协调通用时 (UTC)。
GetLastWriteTime(String) 返回上次写入指定文件或目录的日期和时间。
GetLastWriteTimeUtc(String) 返回上次写入指定文件或目录的日期和时间,其格式为协调通用时 (UTC)。
GetLogicalDrives() 检索此计算机上格式为“:\”的逻辑驱动器的名称。
GetParent(String) 检索指定路径的父目录,包括绝对路径和相对路径。
Move(String, String) 将文件或目录及其内容移到新位置。
SetAccessControl(String, DirectorySecurity) 将 DirectorySecurity 对象描述的访问控制列表 (ACL) 项应用于指定的目录。
SetCreationTime(String, DateTime) 为指定的文件或目录设置创建日期和时间。
SetCreationTimeUtc(String, DateTime) 设置指定文件或目录的创建日期和时间,其格式为协调通用时 (UTC)。
SetCurrentDirectory(String) 将应用程序的当前工作目录设置为指定的目录。
SetLastAccessTime(String, DateTime) 设置上次访问指定文件或目录的日期和时间。
SetLastAccessTimeUtc(String, DateTime) 设置上次访问指定文件或目录的日期和时间,其格式为协调通用时 (UTC)。
SetLastWriteTime(String, DateTime) 设置上次写入目录的日期和时间。
SetLastWriteTimeUtc(String, DateTime) 设置上次写入某个目录的日期和时间,其格式为协调通用时 (UTC)。

         类的 Directory 静态方法对所有方法执行安全检查。 如果要多次重复使用对象,请考虑改用相应的实例方法 DirectoryInfo ,因为安全检查并不总是必要的。

        如果只执行一个与目录相关的操作,则使用静态 Directory 方法而不是相应的 DirectoryInfo 实例方法可能更有效。 大多数 Directory 方法都需要你正在操作的目录的路径。

        备注:在接受字符串 path 参数的成员中,该路径必须格式正确或引发异常。 例如,如果路径完全限定,但以空格 (“c:\temp”) 开头,则不会修整路径字符串,因此路径被视为格式不正确,并且引发异常。 此外,路径或路径组合不能完全限定两次。 例如,“c:\temp c:\windows”也会引发异常。 使用接受路径字符串的方法时,请确保路径格式正确。

        在接受路径的成员中,路径可以引用文件或目录。 可以使用服务器和共享名称的完整路径、相对路径或通用命名约定 (UNC) 路径。

        默认情况下,向所有用户授予对新目录的完整读/写访问权限。 但是,应用必须具有访问现有目录的正确安全性。

        若要要求对目录及其所有子目录拥有权限,请使用目录分隔符结束路径字符串。 (例如,“C:\Temp”授予对 C:\Temp\\ 及其所有子目录的访问权限。) 若要仅要求特定目录的权限,请使用句点结束路径字符串。 (例如“C:\Temp\”。” 仅向 C:\Temp\ 授予对其子目录的访问权限。)

        二、DirectoryInfo 类

DirectoryInfo 类https://docs.microsoft.com/zh-cn/dotnet/api/system.io.directoryinfo?view=netframework-4.0

        1、定义

  • 命名空间:System.IO
  • 程序集:mscorlib.dll
  • 继承:Object→MarshalByRefObject→FileSystemInfo→DirectoryInfo
  • 属性:SerializableAttribute,ComVisibleAttribute 

        公开用于创建、移动和枚举目录和子目录的实例方法。 此类不能被继承。

[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class DirectoryInfo : System.IO.FileSystemInfo

        使用 DirectoryInfo 类执行典型操作,例如复制、移动、重命名、创建和删除目录。

        如果要多次重用某个对象,请考虑使用的实例方法(而不是 DirectoryInfo 类的相应静态方法 Directory ),因为安全检查并不总是必需的。

        2、DirectoryInfo 类的构造函数

DirectoryInfo(String) 初始化指定路径上的 DirectoryInfo 类的新实例。

        3、DirectoryInfo 类的字段

FullPath 表示目录或文件的完全限定目录。(继承自 FileSystemInfo)
OriginalPath 最初由用户指定的目录(不论是相对目录还是绝对目录)。(继承自 FileSystemInfo)

         4、DirectoryInfo 类的属性

Attributes 获取或设置当前文件或目录的特性。(继承自 FileSystemInfo)
CreationTime 获取或设置当前文件或目录的创建时间。(继承自 FileSystemInfo)
CreationTimeUtc 获取或设置当前文件或目录的创建时间,其格式为协调世界时 (UTC)(继承自 FileSystemInfo)
Exists 获取指示目录是否存在的值。
Extension 获取文件名的扩展名部分,包括前导点  即使它是整个文件名,或者不存在扩展名的空字符串。(继承自 FileSystemInfo)
FullName 获取目录或文件的完整目录。(继承自 FileSystemInfo)
LastAccessTime 获取或设置上次访问当前文件或目录的时间。(继承自 FileSystemInfo)
LastAccessTimeUtc 获取或设置上次访问当前文件或目录的时间,其格式为协调世界时 (UTC)(继承自 FileSystemInfo)
LastWriteTime 获取或设置上次写入当前文件或目录的时间。(继承自 FileSystemInfo)
LastWriteTimeUtc 获取或设置上次写入当前文件或目录的时间,其格式为协调世界时 (UTC)(继承自 FileSystemInfo)
LinkTarget 获取位于其中 FullName的链接的目标路径,或者 null 如果此 FileSystemInfo 实例不表示链接。(继承自 FileSystemInfo)
Name 获取此 DirectoryInfo 实例的名称。
Parent 获取指定的子目录的父目录。
Root 获取目录的根部分。
UnixFileMode 获取或设置当前文件或目录的 Unix 文件模式。(继承自 FileSystemInfo)

        4、DirectoryInfo 类的方法

Create() 创建目录。
Create(DirectorySecurity) 使用 DirectorySecurity 对象创建目录。
CreateAsSymbolicLink(String) 创建指向指定pathToTarget位置的符号链接FullName。(继承自 FileSystemInfo)
CreateObjRef(Type) 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。(继承自 MarshalByRefObject)
CreateSubdirectory(String) 在指定路径上创建一个或多个子目录。 指定路径可以是相对于 DirectoryInfo 类的此实例的路径。
CreateSubdirectory(String, DirectorySecurity) 使用指定的安全性在指定的路径上创建一个或多个子目录。 指定路径可以是相对于 DirectoryInfo 类的此实例的路径。
Delete() 如果此 DirectoryInfo 为空则将其删除。
Delete(Boolean) 删除 DirectoryInfo 的此实例,指定是否删除子目录和文件。
EnumerateDirectories() 返回当前目录中的目录信息的可枚举集合。
EnumerateDirectories(String) 返回与指定的搜索模式匹配的目录信息的可枚举集合。
EnumerateDirectories(String, SearchOption) 返回与指定的搜索模式和搜索子目录选项匹配的目录信息的可枚举集合。
EnumerateFiles() 返回当前目录中的文件信息的可枚举集合。
EnumerateFiles(String) 返回与搜索模式匹配的文件信息的可枚举集合。
EnumerateFiles(String, SearchOption) 返回与指定的搜索模式和搜索子目录选项匹配的文件信息的可枚举集合。
EnumerateFileSystemInfos() 返回当前目录中的文件系统信息的可枚举集合。
EnumerateFileSystemInfos(String) 返回与指定的搜索模式匹配的文件系统信息的可枚举集合。
EnumerateFileSystemInfos(String, SearchOption) 返回与指定的搜索模式和搜索子目录选项匹配的文件系统信息的可枚举集合。
Equals(Object) 确定指定对象是否等于当前对象。(继承自 Object)
GetAccessControl() 获取 DirectorySecurity 对象,该对象封装当前 DirectoryInfo 对象所描述的目录的访问控制列表 (ACL) 项。
GetAccessControl(AccessControlSections) 获取 DirectorySecurity 对象,该对象封装当前 DirectoryInfo 对象所描述的目录的指定类型的访问控制列表 (ACL) 项。
GetDirectories() 返回当前目录的子目录。
GetDirectories(String) 返回当前 DirectoryInfo 中、与给定搜索条件匹配的目录的数组。
GetDirectories(String, SearchOption) 返回当前 DirectoryInfo 中与给定的搜索条件匹配并使用某个值确定是否在子目录中搜索的目录的数组。
GetFiles() 返回当前目录的文件列表。
GetFiles(String) 返回当前目录中与给定的搜索模式匹配的文件列表。
GetFiles(String, SearchOption) 返回与给定的搜索模式匹配并且使用某个值确定是否在子目录中进行搜索的当前目录的文件列表。
GetFileSystemInfos() 返回表示某个目录中所有文件和子目录的强类型 FileSystemInfo 项的数组。
GetFileSystemInfos(String) 检索表示与指定的搜索条件匹配的文件和子目录的强类型 FileSystemInfo 对象的数组。
GetFileSystemInfos(String, SearchOption) 检索表示与指定的搜索条件匹配的文件和子目录的 FileSystemInfo 对象的数组。
GetHashCode() 作为默认哈希函数。(继承自 Object)
GetLifetimeService() 检索控制此实例的生存期策略的当前生存期服务对象。(继承自 MarshalByRefObject)
GetObjectData(SerializationInfo, StreamingContext) 设置带有文件名和附加异常信息的 SerializationInfo 对象。(继承自 FileSystemInfo)
GetType() 获取当前实例的 Type。(继承自 Object)
InitializeLifetimeService() 获取生存期服务对象来控制此实例的生存期策略。(继承自 MarshalByRefObject)
MemberwiseClone() 创建当前 Object 的浅表副本。(继承自 Object)
MemberwiseClone(Boolean) 创建当前 MarshalByRefObject 对象的浅表副本。(继承自 MarshalByRefObject)
MoveTo(String) 将 DirectoryInfo 实例及其内容移动到新路径。
Refresh() 刷新对象的状态。(继承自 FileSystemInfo)
ResolveLinkTarget(Boolean) 获取指定链接的目标。(继承自 FileSystemInfo)
SetAccessControl(DirectorySecurity) 将 DirectorySecurity 对象所描述的访问控制列表 (ACL) 项应用于当前 DirectoryInfo 对象所描述的目录。
ToString() 返回传递给 DirectoryInfo 构造函数的原始路径。 使用 FullName 或 Name 属性作为完整路径或文件/目录名,而不是此方法。

        备注:Directory类与DirectoryInfo类基本相同,但DirectoryInfo 类能建立对象。如果执行单一调用就使用Directory类,如果执行一系列调用,就使用实例化的DirectoryInfo的对象

        三、示例

        1、判断文件夹是否存在

using System;
using System.IO;

namespace _20220831_1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Directory类的Exists方法
            bool a1 = Directory.Exists("C:\\Program Files");
            Console.WriteLine(a1);

            //DirectoryInfo类的Exists属性
            DirectoryInfo a2 = new DirectoryInfo("C:\\Program Files");
            if(a2.Exists)
            {
                Console.WriteLine("此文件夹存在");
            }
            else
            {
                Console.WriteLine("此文件夹不存在");
            }
        }
    }
}

        2、创建文件夹

using System;
using System.IO;

namespace _20220831_1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Directory类的CreateDirectory方法
            Directory.CreateDirectory("d:\\新建文件夹(1)");

            //DirectoryInfo类的Create方法
            DirectoryInfo x1 = new DirectoryInfo("d:\\新建文件夹(2)");
            x1.Create();
        }
    }
}

        3、移动文件夹

using System;
using System.IO;

namespace _20220831_1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Directory类的Move方法
            Directory.Move("d:\\新建文件夹(1)", "c:\\新建文件夹(1)");

            //DirectoryInfo类的MoveTo方法
            DirectoryInfo x1 = new DirectoryInfo("d:\\新建文件夹(2)");
            x1.MoveTo("c:\\新建文件夹(2)");
        }
    }
}

        4、删除文件夹

using System;
using System.IO;

namespace _20220831_1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Directory类的Delete方法
            Directory.Delete("d:\\新建文件夹(1)");

            //DirectoryInfo类的Delete方法
            DirectoryInfo x1 = new DirectoryInfo("d:\\新建文件夹(2)");
            x1.Delete();
        }
    }
}

        四、遍历文件夹

        在遍历文件夹时,可以分别使用DirectoryInfo类提供的GetDirectories方法、GetFiles方法、GetFileSystemInfos方法来实现。

        备注:一般在遍历文件夹时会使用GetFileSystemInfos方法,因为GetDirectories方法只遍历文件夹中的子文件夹,GetFiles方法方法只遍历文件夹中的文件,而GetFileSystemInfos方法遍历文件夹中国所有的子文件夹和文件。

        1、DirectoryInfo.GetDirectories方法

        重载

GetDirectories() 返回当前目录的子目录。
GetDirectories(String) 返回当前 DirectoryInfo 中、与给定搜索条件匹配的目录的数组。
GetDirectories(String, SearchOption) 返回当前 DirectoryInfo 中与给定的搜索条件匹配并使用某个值确定是否在子目录中搜索的目录的数组。
GetDirectories()
返回当前目录的子目录。
public System.IO.DirectoryInfo[] GetDirectories ();

参数:
(返回值)DirectoryInfo[]:一个 DirectoryInfo 对象数组。
----------------------------------------------------------------------------------------
GetDirectories(String) 
返回当前 DirectoryInfo 中、与给定搜索条件匹配的目录的数组。
public System.IO.DirectoryInfo[] GetDirectories (string searchPattern);

参数:
searchPattern:要与目录名匹配的搜索字符串。 此参数可以包含有效文本路径和通配符(* 和 ?)的组合,但不支持正则表达式。
(返回值)DirectoryInfo[]:与 DirectoryInfo 匹配的 searchPattern 类型的数组。
----------------------------------------------------------------------------------------
GetDirectories(String, SearchOption) 
返回当前 DirectoryInfo 中与给定的搜索条件匹配并使用某个值确定是否在子目录中搜索的目录的数组。
public System.IO.DirectoryInfo[] GetDirectories (string searchPattern, System.IO.SearchOption searchOption);

参数:
searchPattern:要与目录名匹配的搜索字符串。 此参数可以包含有效文本路径和通配符(* 和 ?)的组合,但不支持正则表达式。
searchOption:用于指定搜索操作是应仅包含当前目录还是应包含所有子目录的枚举值之一。
(返回值)DirectoryInfo[]:与 DirectoryInfo 匹配的 searchPattern 类型的数组。

 GetDirectories()案例

using System;
using System.IO;
namespace _20220901_1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 引用一个目录。
            DirectoryInfo di = new DirectoryInfo("c:\\");
            // 获取对该目录中每个目录的引用。
            DirectoryInfo[] diArr = di.GetDirectories();
            // 显示目录的名称。
            foreach (DirectoryInfo dri in diArr)
                Console.WriteLine(dri.Name);
        }
    }
}

GetDirectories(String) 案例

using System;
using System.IO;
namespace _20220901_1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                DirectoryInfo di = new DirectoryInfo(@"D:\Documents\Desktop");

                DirectoryInfo[] dirs = di.GetDirectories("*p*");
                Console.WriteLine("此目录中包含字母p的文件夹数量为 {0}个。\n", dirs.Length);

                foreach (DirectoryInfo diNext in dirs)
                {
                    Console.WriteLine("名为 {0} 的文件夹内有{1}个文件", diNext,diNext.GetFiles().Length);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("“这个过程失败: {0}", e.ToString());
            }
        }
    }
}

GetDirectories(String, SearchOption) 案例

using System;
using System.IO;
namespace _20220901_1
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = @"c:\";
            string searchPattern = "c*";

            DirectoryInfo di = new DirectoryInfo(path);

            DirectoryInfo[] directories =di.GetDirectories(searchPattern, SearchOption.TopDirectoryOnly);
            FileInfo[] files =di.GetFiles(searchPattern, SearchOption.TopDirectoryOnly);

            Console.WriteLine("在{0}目录中,以字母\"c\"开头的文件有:", path);

            foreach (DirectoryInfo dir in directories)
            {
                Console.WriteLine("{0,-25} {1,25}", dir.FullName, dir.LastWriteTime);
            }
            Console.WriteLine();
            Console.WriteLine("在{0}目录中,以字母\"c\" 开头的文件: ", path);
            foreach (FileInfo file in files)
            {
                Console.WriteLine("{0,-25} {1,25}", file.Name, file.LastWriteTime);
            }
        }
    }
}

        2、DirectoryInfo.GetFiles 方法

        重载

GetFiles(String, SearchOption) 返回与给定的搜索模式匹配并且使用某个值确定是否在子目录中进行搜索的当前目录的文件列表。
GetFiles() 返回当前目录的文件列表。
GetFiles(String) 返回当前目录中与给定的搜索模式匹配的文件列表。
GetFiles(String, SearchOption)
返回与给定的搜索模式匹配并且使用某个值确定是否在子目录中进行搜索的当前目录的文件列表。
public System.IO.FileInfo[] GetFiles (string searchPattern, System.IO.SearchOption searchOption);
参数:
searchPattern:要与文件名匹配的搜索字符串。 此参数可以包含有效文本路径和通配符(* 和 ?)的组合,但不支持正则表达式。
searchOption:用于指定搜索操作是应仅包含当前目录还是应包含所有子目录的枚举值之一。
(返回值)FileInfo[]:FileInfo 类型的数组。
-------------------------------------------------------------------------------------
GetFiles()
返回当前目录的文件列表。
public System.IO.FileInfo[] GetFiles ();
参数:
(返回值)FileInfo[]:FileInfo 类型的数组。
-------------------------------------------------------------------------------------
GetFiles(String)
返回当前目录中与给定的搜索模式匹配的文件列表。
public System.IO.FileInfo[] GetFiles (string searchPattern);
参数:
searchPattern:要与文件名匹配的搜索字符串。 此参数可以包含有效文本路径和通配符(* 和 ?)的组合,但不支持正则表达式。
(返回值)FileInfo[]:FileInfo 类型的数组。

        3、DirectoryInfo.GetFileSystemInfos 方法

        重载

GetFileSystemInfos() 返回表示某个目录中所有文件和子目录的强类型 FileSystemInfo 项的数组。
GetFileSystemInfos(String) 检索表示与指定的搜索条件匹配的文件和子目录的强类型 FileSystemInfo 对象的数组。
GetFileSystemInfos(String, SearchOption) 检索表示与指定的搜索条件匹配的文件和子目录的 FileSystemInfo 对象的数组。
GetFileSystemInfos()
返回表示某个目录中所有文件和子目录的强类型 FileSystemInfo 项的数组。
public System.IO.FileSystemInfo[] GetFileSystemInfos ();
参数:
(返回值)FileSystemInfo[]:强类型 FileSystemInfo 项的数组。
-----------------------------------------------------------------------------------------------------------------
GetFileSystemInfos(String)
检索表示与指定的搜索条件匹配的文件和子目录的强类型 FileSystemInfo 对象的数组。
public System.IO.FileSystemInfo[] GetFileSystemInfos (string searchPattern);
参数:
searchPattern:要与目录和文件的名称匹配的搜索字符串。 此参数可以包含有效文本路径和通配符(* 和 ?)的组合,但不支持正则表达式。
(返回值)FileSystemInfo[]:与搜索条件匹配的强类型 FileSystemInfo 对象的数组。
-----------------------------------------------------------------------------------------------------------------
GetFileSystemInfos(String, SearchOption)
检索表示与指定的搜索条件匹配的文件和子目录的 FileSystemInfo 对象的数组。
public System.IO.FileSystemInfo[] GetFileSystemInfos (string searchPattern, System.IO.SearchOption searchOption);
参数:
searchPattern:要与目录和文件的名称匹配的搜索字符串。 此参数可以包含有效文本路径和通配符(* 和 ?)的组合,但不支持正则表达式。
searchOption:用于指定搜索操作是应仅包含当前目录还是应包含所有子目录的枚举值之一。 默认值是 TopDirectoryOnly。
(返回值)FileSystemInfo[]:与搜索条件匹配的文件系统项的数组。

        五、案例

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
 
namespace _20220726_1
{
    class Program
    {
        static void Main(string[] args)
        {
            //一、在d盘下创建一个01文件夹(如果有,不会替换)
            Directory.CreateDirectory("d:/01");
 
            //二、获取此目录下jpg后缀的文件,并将名称显示出来
            string[] path1 = Directory.GetFiles(@"D:\迅雷下载", "*.jpg");
            for (int i = 0; i < path1.Length; i++)
            {
                Console.WriteLine(path1[i]);
            }
            //三、获取指定目录下所有文件夹的全路径
            string[] path2=Directory.GetDirectories(@"D:\迅雷下载");
            for (int j = 0; j < path2.Length; j++)
            {
                Console.WriteLine(path2[j]);
            }
 
            //四、创建文件夹
            if (Directory.Exists(@"D:/01/02/"))//在目录后面一定要加/,不然命名会出错
             //如果没有此目录,不会自动添加,更不会执行后续步骤
            {
                for(int k = 0; k < 100; k++)
                {
                    Directory.CreateDirectory(@"D:/01/02/" + k);
                }
            }
            Console.WriteLine("ok");
            Console.ReadKey();
 
            //五、删除文件夹
            Directory.Delete(@"D:/01/02",true);
            Console.ReadKey();
 
        }
    }
}

        六、案例

C# 第七章『I/O数据流』◆第3节:Directory类、DirectoryInfo类、遍历文件夹_第1张图片

using System;
using System.IO;
using System.Windows.Forms;

namespace Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = folderBrowserDialog1.SelectedPath;//将选择的文件夹的路径 放到文本框中
                DirectoryInfo df1 = new DirectoryInfo(textBox1.Text);//实例化DirectoryInfo对象

                FileSystemInfo[] arr1 = df1.GetFileSystemInfos();//获取指定目录下的所有子目录及文件类型

                foreach (FileSystemInfo arr2 in arr1)
                {
                    if (arr2 is DirectoryInfo)//判断是否文件夹
                    {
                        DirectoryInfo x1 = new DirectoryInfo(arr2.FullName);//使用获取的文件夹名称实例化DirectoryInfo对象
                        
                        //________________________________方法1___________________________________
                        ListViewItem lvt1 = new ListViewItem();
                        lvt1.Text = x1.Name;//文件夹的名字
                        lvt1.SubItems.Add(x1.FullName);//文件夹的路径
                        lvt1.SubItems.Add("");//文件夹没有大小
                        lvt1.SubItems.Add(x1.CreationTime.ToShortDateString());
                        this.listView1.Items.Add(lvt1);

                        //________________________________方法2___________________________________//为ListView控件添加文件夹信息
                        //listView1.Items.Add(x1.Name);
                        //listView1.Items[listView1.Items.Count - 1].SubItems.Add(x1.FullName);
                        //listView1.Items[listView1.Items.Count - 1].SubItems.Add("");
                        //listView1.Items[listView1.Items.Count - 1].SubItems.Add(x1.CreationTime.ToShortDateString());
                    }
                    else
                    {
                        //使用获取的文件名称实例化FileInfo对象
                        FileInfo x2 = new FileInfo(arr2.FullName);
                        //为ListView控件添加文件信息
                        listView1.Items.Add(x2.Name);
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(x2.FullName);
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(x2.Length.ToString());
                        listView1.Items[listView1.Items.Count - 1].SubItems.Add(x2.CreationTime.ToShortDateString());
                    }
                }
            }
        }
    }
}

 

你可能感兴趣的:(C#入门,c#,视觉检测)