C# IO.Directory 操作目录

// 参考来源: https://learn.microsoft.com/zh-cn/dotnet/api/system.io.directory?view=net-8.0
// Directory 公开用于通过目录和子目录进行创建、移动和枚举的静态方法。 此类不能被继承。
/*
 * Directory将 类用于复制、移动、重命名、创建和删除目录等典型操作。
 * 若要创建目录,请使用方法之 CreateDirectory 一。
 * 若要删除目录,请使用方法之 Delete 一。
 * 若要获取或设置应用的当前目录,请使用 GetCurrentDirectory 或 SetCurrentDirectory 方法。
 * 若要操作DateTime与目录的创建、访问和写入相关的信息,请使用 和 SetCreationTime等SetLastAccessTime方法。
 * 类的 Directory 静态方法对所有方法执行安全检查。 如果要多次重用对象,请考虑改用 对应的实例方法 DirectoryInfo ,因为安全检查并非始终是必需的。
 * 如果只执行一个与目录相关的操作,则使用静态 Directory 方法而不是相应的 DirectoryInfo 实例方法可能更有效。 大多数 Directory 方法都需要要操作的目录的路径。
 */


using System.IO;

namespace ConsoleApp_Directory
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Directory_Search();  // 检索目录或文件
            Dir();
        }


        // 搜索目录和文件
        
        static void Directory_Search() 
        {
            // 注意:  调用以下directory的方法的参数最少要有一项, 最多三项.
            Console.WriteLine("第一段");
            // EnumerateDirectories(String, String, SearchOption) 返回指定路径中与搜索模式匹配的目录完整名称的可枚举集合,还可搜索子目录。
            var Dir = Directory.EnumerateDirectories("D:\\Program Files", "ffmpeg*", SearchOption.TopDirectoryOnly);
            // 参数
            // path<string> 要搜索的目录的相对或绝对路径。 此字符串不区分大小写。
            // searchPattern<String>  要与 path 中的目录名称匹配的搜索字符串成。 此参数可以包含有效文本路径和通配符(* 和?)的组合,但不支持正则表达式。
            // SearchOption<Enum>  指定搜索操作是应仅包含当前目录还是应包含所有子目录的枚举值之一。 默认值是 TopDirectoryOnly(当前目录), AllDirectories(递归搜索)。
            //返回
            //IEnumerable<String>  一个可枚举集合,它包含 path 指定的目录中与指定的搜索模式和搜索选项匹配的目录的完整名称(包括路径)。
            
            foreach (string x in Dir) { Console.WriteLine(x); }  // 返回是个IEnumerable<String>类型所以需要遍历将string打印出来

            Console.WriteLine("第二段");
            // EnumerateFiles(String, String, SearchOption) 返回指定路径中与搜索模式匹配的完整文件名的可枚举集合,还可以搜索子目录。
            // GetFiles(String, String, SearchOption)       返回指定目录中与指定的搜索模式匹配的文件的名称(包含其路径),使用某个值确定是否要搜索子目录。
            var File = Directory.EnumerateFiles("D:\\Program Files", "ffmpeg*", SearchOption.AllDirectories);  // 和搜索目录的方式是一样的.
            foreach (string x in File) { Console.WriteLine(x); }        // 遍历打印出来

            Console.WriteLine("第三段");
            // EnumerateFileSystemEntries(String, String, SearchOption)  返回指定路径中与搜索模式匹配的文件名称和目录名的可枚举集合,还可以搜索子目录。
            // GetFileSystemEntries(String, String, SearchOption)        返回指定路径中与搜索模式匹配的所有文件名和目录名的数组,还可以搜索子目录。
            var SysFile = Directory.EnumerateFileSystemEntries("D:\\Program Files", "ffmpeg*", SearchOption.AllDirectories);  // 注意: EnumerateFileSystemEntries可以检索目录和文件; 而EnumerateFiles只能检索文件.   
            foreach (string x in SysFile) {  Console.WriteLine(x); }


            Console.WriteLine("第四段");
            // Directory.GetDirectories(String, String, SearchOption) 返回与在指定目录中的指定搜索模式匹配的子目录的名称(包括其路径),还可以选择地搜索子目录。
            var Getdir = Directory.GetDirectories("D:\\Program Files", "ffmpeg*", SearchOption.AllDirectories);  // 该方法仅会检索目录
            foreach (string x in Getdir) { Console.WriteLine(x); }
            /* GetDirectories 参数
             * path<String> 要搜索的目录的相对或绝对路径。 此字符串不区分大小写。
             * searchPattern<String>要与 path 中的子目录的名称匹配的搜索字符串。 此参数可以包含有效文本和通配符的组合,但不支持正则表达式。
             * searchOption<SearchOption> 用于指定搜索操作是应包含所有子目录还是仅包含当前目录的枚举值之一。
             返回
             * <String[]> 与指定条件匹配的子目录的完整名称(包含路径)的数组;如果未找到任何目录,则为空数组。
             */


            // 简单方法
            // CreateDirectory(String)              在指定路径中创建所有目录和子目录,除非它们已经存在。
            // Delete(String, Boolean)	            删除指定的目录,并删除该目录中的所有子目录和文件(如果表示)。
            // Move(String, String)	                将文件或目录及其内容移到新位置。
            // GetDirectoryRoot(string)             输出盘符, 可以目录或文件名
            // Directory.Exists(string)             判断是否为目录, Bool类型 
            // Exists(String)	                    确定给定路径是否引用磁盘上的现有目录。
            // GetCreationTime(String)              获取目录的创建日期和时间。
            // GetCurrentDirectory()                获取应用程序的当前工作目录。
            // SetCreationTime(String, DateTime)    为指定的文件或目录设置创建日期和时间。
            // SetCurrentDirectory(String)          将应用程序的当前工作目录设置为指定的目录。
            // SetLastAccessTime(String, DateTime)  设置上次访问指定文件或目录的日期和时间。
            // GetLastWriteTime(String)             返回上次写入指定文件或目录的日期和时间。
            // GetLastAccessTime(String)	        返回上次访问指定文件或目录的日期和时间。
            // Directory.GetCurrentDirectory();     输出当前程序的路径 
            // CreateTempSubdirectory(String)       在当前用户的临时目录中创建一个唯一名称的空目录。
            // CreateSymbolicLink(string, string)   创建快捷方式(符号链接), 参数path<string> 快捷方式路径, pathToTarget<string> 符号链接的目标目录。 如果当前存在文件则报错

        }

        static void Dir() 
        {
            DirectoryInfo directoryInfo = new DirectoryInfo("d:/123");
            DirectoryInfo ne = directoryInfo.CreateSubdirectory("123");  // 创建子目录. 其实这是新生成一个DirectoryInfo对象, 将之前的目录作为父目录. 不建议批量操作.

            /* 属性
             * directoryInfo.Exists         判断是否存在, 存在为false否则为true
             * directoryInfo.Extension      读取文件后缀
             * directoryInfo.Attributes     判断类型, 仅能区别Archive(存档) 和 Directory(目录) 
             * directoryInfo.Parent         输出所在盘符
             * directoryInfo.Root           获取目录的根部分
             * directoryInfo.Name           输出目录名
             * directoryInfo.FullName       输出目录完整路径
             * directoryInfo.LinkTarget     输出符号链接(快捷方式)的来源, 仅能支持 Directory.CreateSymbolicLink 创建的符号链接
             * directoryInfo.CreationTime	获取或设置当前文件或目录的创建时间。
             * directoryInfo.LastAccessTime	获取或设置上次访问当前文件或目录的时间。
             * directoryInfo.LastWriteTime	获取或设置上次写入当前文件或目录的时间。
             */

            /* 简单方法
             * Create()         创建目录
             * MoveTo(String)	将 DirectoryInfo 实例及其内容移动到新路径。
             * Refresh()	    刷新对象的状态。
             * Delete(Boolean)	删除 DirectoryInfo 的此实例,指定是否删除子目录和文件。
             * EnumerateDirectories(String, SearchOption)	    返回与指定的搜索模式和搜索子目录选项匹配的目录信息的可枚举集合。
             * EnumerateFiles(String, SearchOption)	            返回与指定的搜索模式和搜索子目录选项匹配的文件信息的可枚举集合。
             * EnumerateFileSystemInfos(String, SearchOption)   返回与指定的搜索模式和搜索子目录选项匹配的文件系统信息的可枚举集合。
             * GetDirectories(String, SearchOption)	            返回当前 DirectoryInfo 中与给定的搜索条件匹配并使用某个值确定是否在子目录中搜索的目录的数组。
             * GetFiles(String, SearchOption)	                返回与给定的搜索模式匹配并且使用某个值确定是否在子目录中进行搜索的当前目录的文件列表。
             * GetFileSystemInfos(String, SearchOption)	        检索表示与指定的搜索条件匹配的文件和子目录的 FileSystemInfo 对象的数组。
             */
        }
    }
}

参考来源

posted @ 2024-03-24 08:21  edolf  阅读(26)  评论(0编辑  收藏  举报