DirectoryInfo 类

定义

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

public ref class DirectoryInfo sealed : System::IO::FileSystemInfo
public sealed class DirectoryInfo : System.IO.FileSystemInfo
[System.Serializable]
public sealed class DirectoryInfo : System.IO.FileSystemInfo
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class DirectoryInfo : System.IO.FileSystemInfo
type DirectoryInfo = class
    inherit FileSystemInfo
[<System.Serializable>]
type DirectoryInfo = class
    inherit FileSystemInfo
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type DirectoryInfo = class
    inherit FileSystemInfo
Public NotInheritable Class DirectoryInfo
Inherits FileSystemInfo
继承
DirectoryInfo
继承
属性

示例

以下示例演示类的 DirectoryInfo 一些主要成员。

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        // Specify the directories you want to manipulate.
        DirectoryInfo di = new DirectoryInfo(@"c:\MyDir");
        try
        {
            // Determine whether the directory exists.
            if (di.Exists)
            {
                // Indicate that the directory already exists.
                Console.WriteLine("That path exists already.");
                return;
            }

            // Try to create the directory.
            di.Create();
            Console.WriteLine("The directory was created successfully.");

            // Delete the directory.
            di.Delete();
            Console.WriteLine("The directory was deleted successfully.");
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
        finally {}
    }
}
open System.IO

// Specify the directories you want to manipulate.
let di = DirectoryInfo @"c:\MyDir"
try
    // Determine whether the directory exists.
    if di.Exists then
        // Indicate that the directory already exists.
        printfn "That path exists already."
    else
        // Try to create the directory.
        di.Create()
        printfn "The directory was created successfully."

        // Delete the directory.
        di.Delete()
        printfn "The directory was deleted successfully."
with e ->
    printfn $"The process failed: {e}"
Imports System.IO

Public Class Test
    Public Shared Sub Main()
        ' Specify the directories you want to manipulate.
        Dim di As DirectoryInfo = New DirectoryInfo("c:\MyDir")
        Try
            ' Determine whether the directory exists.
            If di.Exists Then
                ' Indicate that it already exists.
                Console.WriteLine("That path exists already.")
                Return
            End If

            ' Try to create the directory.
            di.Create()
            Console.WriteLine("The directory was created successfully.")

            ' Delete the directory.
            di.Delete()
            Console.WriteLine("The directory was deleted successfully.")

        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class

以下示例演示如何复制目录及其内容。

using System;
using System.IO;

class CopyDir
{
    public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
    {
        if (source.FullName.ToLower() == target.FullName.ToLower())
        {
            return;
        }

        // Check if the target directory exists, if not, create it.
        if (!Directory.Exists(target.FullName))
        {
            Directory.CreateDirectory(target.FullName);
        }

        // Copy each file into it's new directory.
        foreach (FileInfo fi in source.GetFiles())
        {
            Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);
            fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
        }

        // Copy each subdirectory using recursion.
        foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
        {
            DirectoryInfo nextTargetSubDir =
                target.CreateSubdirectory(diSourceSubDir.Name);
            CopyAll(diSourceSubDir, nextTargetSubDir);
        }
    }

    public static void Main()
    {
        string sourceDirectory = @"c:\sourceDirectory";
        string targetDirectory = @"c:\targetDirectory";

        DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
        DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);

        CopyAll(diSource, diTarget);
    }

    // Output will vary based on the contents of the source directory.
}
open System.IO

let rec copyAll (source: DirectoryInfo) (target: DirectoryInfo) =
    if source.FullName.ToLower() <> target.FullName.ToLower() then
        // Check if the target directory exists, if not, create it.
        if not (Directory.Exists target.FullName) then
            Directory.CreateDirectory target.FullName |> ignore

        // Copy each file into it's new directory.
        for fi in source.GetFiles() do
            printfn $@"Copying {target.FullName}\{fi.Name}"
            fi.CopyTo(Path.Combine(string target, fi.Name), true) |> ignore

        // Copy each subdirectory using recursion.
        for diSourceSubDir in source.GetDirectories() do
            target.CreateSubdirectory diSourceSubDir.Name
            |> copyAll diSourceSubDir

let sourceDirectory = @"c:\sourceDirectory"
let targetDirectory = @"c:\targetDirectory"

let diSource = DirectoryInfo sourceDirectory
let diTarget = DirectoryInfo targetDirectory

copyAll diSource diTarget

// Output will vary based on the contents of the source directory.
Imports System.IO

Class CopyDir
    Shared Sub CopyAll(ByVal source As DirectoryInfo, ByVal target As DirectoryInfo)
        If (source.FullName.ToLower() = target.FullName.ToLower()) Then
            Return
        End If

        ' Check if the target directory exists, if not, create it.
        If Directory.Exists(target.FullName) = False Then
            Directory.CreateDirectory(target.FullName)
        End If

        ' Copy each file into it's new directory.
        For Each fi As FileInfo In source.GetFiles()
            Console.WriteLine("Copying {0}\{1}", target.FullName, fi.Name)
            fi.CopyTo(Path.Combine(target.ToString(), fi.Name), True)
        Next

        ' Copy each subdirectory using recursion.
        For Each diSourceSubDir As DirectoryInfo In source.GetDirectories()
            Dim nextTargetSubDir As DirectoryInfo = target.CreateSubdirectory(diSourceSubDir.Name)
            CopyAll(diSourceSubDir, nextTargetSubDir)
        Next
    End Sub

    Shared Sub Main()
        Dim sourceDirectory As String = "c:\\sourceDirectory"
        Dim targetDirectory As String = "c:\\targetDirectory"

        Dim diSource As DirectoryInfo = New DirectoryInfo(sourceDirectory)
        Dim diTarget As DirectoryInfo = New DirectoryInfo(targetDirectory)

        CopyAll(diSource, diTarget)
    End Sub
    ' Output will vary based on the contents of the source directory.
End Class

注解

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

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

注释

在接受路径作为输入字符串的成员中,该路径的格式必须正确或引发异常。 例如,如果路径完全限定,但以空格开头,则不会在类的方法中剪裁路径。 因此,路径格式不正确,并引发异常。 同样,路径或路径的组合不能完全限定两次。 例如,在大多数情况下,“c:\temp c:\windows”也会引发异常。 使用接受路径字符串的方法时,请确保路径格式正确。

在接受路径的成员中,路径可以引用文件或仅引用目录。 指定的路径还可以引用服务器和共享名称的相对路径或通用命名约定 (UNC) 路径。 例如,以下所有路径都是可接受的路径:

  • Visual Basic 中的“c:\\MyDir\\MyFile.txt”,或“c:\MyDir\MyFile.txt”。

  • C# 中的“c:\\MyDir”或 Visual Basic 中的“c:\MyDir”。

  • C# 中的“MyDir\\MySubdir”或 Visual Basic 中的“MyDir\MySubDir”。

  • C# 中的“\\\MyServer\\MyShare”或 Visual Basic 中的“\\MyServer\MyShare”。

默认情况下,向所有用户授予对新目录的完整读/写访问权限。

有关常见 I/O 任务的列表,请参阅 常见 I/O 任务

构造函数

名称 说明
DirectoryInfo(String)

在指定路径上初始化类的新实例 DirectoryInfo

字段

名称 说明
FullPath

表示目录或文件的完全限定路径。

(继承自 FileSystemInfo)
OriginalPath

最初由用户指定的路径,无论是相对路径还是绝对路径。

(继承自 FileSystemInfo)

属性

名称 说明
Attributes

获取或设置当前文件或目录的属性。

(继承自 FileSystemInfo)
CreationTime

获取或设置当前文件或目录的创建时间。

(继承自 FileSystemInfo)
CreationTimeUtc

获取或设置当前文件或目录的协调世界时(UTC)的创建时间。

(继承自 FileSystemInfo)
Exists

获取一个值,该值指示目录是否存在。

Extension

获取文件名的扩展名部分,包括前导点 . (即使它是整个文件名)或空字符串(如果没有扩展名)。

(继承自 FileSystemInfo)
FullName

获取目录的完整路径。

FullName

获取目录或文件的完整路径。

(继承自 FileSystemInfo)
LastAccessTime

获取或设置上次访问当前文件或目录的时间。

(继承自 FileSystemInfo)
LastAccessTimeUtc

获取或设置上次访问当前文件或目录的时间(UTC)。

(继承自 FileSystemInfo)
LastWriteTime

获取或设置上次写入当前文件或目录的时间。

(继承自 FileSystemInfo)
LastWriteTimeUtc

获取或设置上次写入当前文件或目录的时间(UTC)。

(继承自 FileSystemInfo)
LinkTarget

获取位于其中 FullName的链接的目标路径,或者 nullFileSystemInfo 实例不表示链接。

(继承自 FileSystemInfo)
Name

获取此 DirectoryInfo 实例的名称。

Parent

获取指定子目录的父目录。

Root

获取目录的根部分。

UnixFileMode

获取或设置当前文件或目录的 Unix 文件模式。

(继承自 FileSystemInfo)

方法

名称 说明
Create()

创建目录。

Create(DirectorySecurity)

使用 DirectorySecurity 对象创建目录。

CreateAsSymbolicLink(String)

创建指向 FullName 指定 pathToTarget位置的符号链接。

(继承自 FileSystemInfo)
CreateObjRef(Type)

创建一个对象,其中包含生成用于与远程对象通信的代理所需的所有相关信息。

(继承自 MarshalByRefObject)
CreateSubdirectory(String, DirectorySecurity)

在具有指定安全性的指定路径上创建子目录或子目录。 指定的路径可以相对于类的 DirectoryInfo 此实例。

CreateSubdirectory(String)

在指定路径上创建子目录或子目录。 指定的路径可以相对于类的 DirectoryInfo 此实例。

Delete()

如果为 DirectoryInfo 空,则将其删除。

Delete(Boolean)

删除此实例 DirectoryInfo,指定是否删除子目录和文件。

EnumerateDirectories()

返回当前目录中目录信息的可枚举集合。

EnumerateDirectories(String, EnumerationOptions)

返回与指定的搜索模式和枚举选项匹配的目录信息的可枚举集合。

EnumerateDirectories(String, SearchOption)

返回与指定的搜索模式和搜索子目录选项匹配的目录信息的可枚举集合。

EnumerateDirectories(String)

返回与指定搜索模式匹配的目录信息的可枚举集合。

EnumerateFiles()

返回当前目录中文件信息的可枚举集合。

EnumerateFiles(String, EnumerationOptions)

返回与指定的搜索模式和枚举选项匹配的文件信息的可枚举集合。

EnumerateFiles(String, SearchOption)

返回与指定的搜索模式和搜索子目录选项匹配的文件信息的可枚举集合。

EnumerateFiles(String)

返回与搜索模式匹配的文件信息的可枚举集合。

EnumerateFileSystemInfos()

返回当前目录中文件系统信息的可枚举集合。

EnumerateFileSystemInfos(String, EnumerationOptions)

返回与指定的搜索模式和枚举选项匹配的文件系统信息的可枚举集合。

EnumerateFileSystemInfos(String, SearchOption)

返回与指定的搜索模式和搜索子目录选项匹配的文件系统信息的可枚举集合。

EnumerateFileSystemInfos(String)

返回与指定搜索模式匹配的文件系统信息的可枚举集合。

Equals(Object)

确定指定的对象是否等于当前对象。

(继承自 Object)
GetAccessControl()

获取一个 DirectorySecurity 对象,该对象封装当前 DirectoryInfo 对象描述的目录的访问控制列表(ACL)条目。

GetAccessControl(AccessControlSections)

获取一个 DirectorySecurity 对象,该对象封装当前 DirectoryInfo 对象描述的目录的指定类型的访问控制列表 (ACL) 条目。

GetDirectories()

返回当前目录的子目录。

GetDirectories(String, EnumerationOptions)

返回当前 DirectoryInfo 匹配指定搜索模式和枚举选项中的目录数组。

GetDirectories(String, SearchOption)

返回当前 DirectoryInfo 匹配给定搜索条件的目录数组,并使用值来确定是否搜索子目录。

GetDirectories(String)

返回当前 DirectoryInfo 匹配给定搜索条件的目录数组。

GetFiles()

从当前目录返回文件列表。

GetFiles(String, EnumerationOptions)

从与指定的搜索模式和枚举选项匹配的当前目录中返回文件列表。

GetFiles(String, SearchOption)

从与给定搜索模式匹配的当前目录中返回一个文件列表,并使用一个值来确定是否搜索子目录。

GetFiles(String)

从与给定搜索模式匹配的当前目录中返回文件列表。

GetFileSystemInfos()

返回表示目录中所有文件和子目录的强类型 FileSystemInfo 条目数组。

GetFileSystemInfos(String, EnumerationOptions)

检索表示与指定搜索模式和枚举选项匹配的文件和子目录的强类型 FileSystemInfo 对象的数组。

GetFileSystemInfos(String, SearchOption)

检索表示与指定搜索条件匹配的文件和子目录的对象数组 FileSystemInfo

GetFileSystemInfos(String)

检索表示与指定搜索条件匹配的文件和子目录的强类型 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 属性,而不是此方法。

ToString()

返回原始路径。 使用 FullName 完整路径或文件/目录名称的或 Name 属性。

(继承自 FileSystemInfo)

扩展方法

名称 说明
Create(DirectoryInfo, DirectorySecurity)

创建一个新目录,确保使用指定的目录安全性创建该目录。 如果目录已存在,则不执行任何操作。

GetAccessControl(DirectoryInfo, AccessControlSections)

返回目录的安全信息。

GetAccessControl(DirectoryInfo)

返回目录的安全信息。

SetAccessControl(DirectoryInfo, DirectorySecurity)

更改现有目录的安全属性。

适用于

另请参阅