ZetCode

C# 目录

最后修改于 2025 年 4 月 20 日

本教程介绍如何在 C# 中使用 Directory 类来执行目录操作。 Directory 类提供了用于创建、移动以及枚举目录和子目录的静态方法。

Directory 类公开了用于目录操作的静态方法。它与提供实例方法的 DirectoryInfo 类一起使用。

Directory 类可用于创建、删除、移动目录以及枚举其内容。 它处理路径操作和目录权限。

检查目录是否存在

此示例演示如何使用 Directory.Exists 方法检查目录是否存在。 这通常是目录操作的第一步。

Program.cs
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = @"C:\Temp\TestDirectory";
        
        if (Directory.Exists(path))
        {
            Console.WriteLine("Directory exists.");
        }
        else
        {
            Console.WriteLine("Directory does not exist.");
        }
    }
}

如果指定的路径引用现有目录,则 Directory.Exists 方法返回 true。 路径可以是相对路径或绝对路径。 在此示例中,我们检查 "C:\Temp\TestDirectory" 是否存在目录。

该方法执行简单的布尔检查,不会因无效路径而引发异常。 这使得在尝试其他目录操作之前使用它是安全的。 在执行可能失败的操作之前,始终验证目录是否存在。

创建目录

此示例演示如何使用 Directory.CreateDirectory 创建新目录。 该方法创建指定路径中的所有目录和子目录。

Program.cs
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = @"C:\Temp\NewDirectory";
        
        try
        {
            Directory.CreateDirectory(path);
            Console.WriteLine("Directory created successfully.");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

CreateDirectory 创建指定路径中所有尚不存在的目录。 如果目录存在,则该方法不执行任何操作。 该示例包括对创建可能失败的情况的基本错误处理。

该方法返回一个表示已创建目录的 DirectoryInfo 对象。 我们在此处不使用返回值,但它可以用于进一步的操作。 该路径可以包含多个尚不存在的级别。

获取目录文件

此示例演示如何使用 Directory.GetFiles 获取目录中的所有文件。 该方法返回完整路径的数组。

Program.cs
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = @"C:\Temp";
        
        try
        {
            string[] files = Directory.GetFiles(path);
            
            Console.WriteLine("Files in directory:");
            foreach (string file in files)
            {
                Console.WriteLine(file);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

GetFiles 返回指定目录中所有文件的名称。 默认情况下,它不搜索子目录。 该方法具有用于搜索模式和搜索选项的重载。

返回的路径包括完整的目录路径。 该示例显示了目录可能无法访问的情况下的基本错误处理。 这对于目录列表操作很有用。

获取子目录

此示例演示如何使用 Directory.GetDirectories 获取目录的所有子目录。 该方法返回路径数组。

Program.cs
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = @"C:\Temp";
        
        try
        {
            string[] dirs = Directory.GetDirectories(path);
            
            Console.WriteLine("Subdirectories:");
            foreach (string dir in dirs)
            {
                Console.WriteLine(dir);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

GetDirectories 返回指定目录中所有子目录的名称。 与 GetFiles 一样,它具有用于搜索模式和选项的重载。 默认情况下,该方法不会递归到子目录中。

返回的路径是完全限定的。 本示例演示了基本的目录遍历。 错误处理确保程序在目录不可访问时不会崩溃。

移动目录

此示例演示如何使用 Directory.Move 移动目录。 该方法移动目录及其内容。

Program.cs
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string sourceDir = @"C:\Temp\OldDir";
        string destDir = @"C:\Temp\NewDir";
        
        try
        {
            Directory.Move(sourceDir, destDir);
            Console.WriteLine("Directory moved successfully.");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

Move 将目录传输到新位置。 目标必须不存在。 该操作在同一驱动器上是原子的。 跨驱动器,它是一个复制和删除操作。

该方法移动所有内容,包括子目录。 该示例显示了移动可能失败的情况下的基本错误处理。 这对于目录重组很有用。

删除目录

此示例演示如何使用 Directory.Delete 删除目录。 该方法可以递归删除。

Program.cs
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = @"C:\Temp\DirectoryToDelete";
        
        try
        {
            Directory.Delete(path, recursive: true);
            Console.WriteLine("Directory deleted successfully.");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

Delete 删除指定的目录。 recursive 参数确定是否删除子目录和文件。 如果没有它,目录必须为空。

该示例显示了启用了递归选项的删除。 错误处理捕获删除可能失败的情况。 这对于清理操作很有用。

获取目录信息

此示例演示如何使用 Directory 类方法获取目录创建、访问和写入时间。

Program.cs
using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = @"C:\Temp";
        
        try
        {
            Console.WriteLine($"Creation time: {Directory.GetCreationTime(path)}");
            Console.WriteLine($"Last access time: {Directory.GetLastAccessTime(path)}");
            Console.WriteLine($"Last write time: {Directory.GetLastWriteTime(path)}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

Directory 类提供了获取各种时间戳的方法。 这些包括创建时间、上次访问时间和上次写入时间。 这些时间以 DateTime 值返回。

该示例显示了基本的目录元数据检索。 错误处理确保程序在目录不可访问时不会崩溃。 这对于目录监视和日志记录很有用。

来源

Directory 类文档

本教程介绍了 C# 中使用 Directory 类进行目录操作,包括目录的创建、删除、移动和枚举。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程