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 中對應的靜態方法,因為安全性檢查不一定是必要的。

Note

在接受路徑做為輸入字串的成員中,該路徑的格式必須良好或引發例外狀況。 例如,如果路徑為完整,但開頭為空格,則路徑不會在 類別的方法中修剪。 因此,路徑的格式不正確,而且會引發例外狀況。 同樣地,路徑或路徑的組合不能完全限定兩次。 例如,在大部分情況下,“c:\temp c:\windows” 也會引發例外狀況。 使用接受路徑字串的方法時,請確定您的路徑格式良好。

在接受路徑的成員中,路徑可以參考檔案或只參考目錄。 指定的路徑也可以參考伺服器和共享名稱的相對路徑或通用命名慣例 (UNC) 路徑。 例如,下列所有都是可接受的路徑:

  • C# 中的「c:\\MyDir\\MyFile.txt」,或 Visual Basic 中的「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 任務的清單,請參見 Common I/O 任務

建構函式

名稱 Description
DirectoryInfo(String)

初始化指定路徑上類別的新實例 DirectoryInfo

欄位

名稱 Description
FullPath

表示目錄或檔案的完整路徑。

(繼承來源 FileSystemInfo)
OriginalPath

使用者原本指定的路徑,無論是相對路徑還是絕對路徑。

(繼承來源 FileSystemInfo)

屬性

名稱 Description
Attributes

取得或設定目前檔案或目錄的屬性。

(繼承來源 FileSystemInfo)
CreationTime

取得或設定目前檔案或目錄的建立時間。

(繼承來源 FileSystemInfo)
CreationTimeUtc

取得或設定目前檔案或目錄的建立時間,以協調的通用時間(UTC)為基準。

(繼承來源 FileSystemInfo)
Exists

會獲得一個值來表示該目錄是否存在。

Extension

取得檔名的副檔名部分,包括開頭的點 . ,即使它是整個檔名;若沒有副檔名則是空字串。

(繼承來源 FileSystemInfo)
FullName

取得目錄的完整路徑。

FullName

取得目錄或檔案的完整路徑。

(繼承來源 FileSystemInfo)
LastAccessTime

取得或設定目前檔案或目錄最後被存取的時間。

(繼承來源 FileSystemInfo)
LastAccessTimeUtc

取得或設定協調世界時間(UTC)中,目前檔案或目錄最後被存取的時間。

(繼承來源 FileSystemInfo)
LastWriteTime

取得或設定目前檔案或目錄最後一次寫入的時間。

(繼承來源 FileSystemInfo)
LastWriteTimeUtc

取得或設定協調世界時間(UTC)中當前檔案或目錄最後一次寫入的時間。

(繼承來源 FileSystemInfo)
Name

知道這個 DirectoryInfo 實例的名稱。

Parent

取得指定子目錄的父目錄。

Root

它會取得目錄的根源部分。

方法

名稱 Description
Create()

建立目錄。

Create(DirectorySecurity)

DirectorySecurity 物件建立目錄。

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)
SetAccessControl(DirectorySecurity)

將物件描述 DirectorySecurity 的存取控制清單(ACL)條目套用到目前 DirectoryInfo 物件所描述的目錄。

ToString()

回傳傳給 DirectoryInfo 建構子的原始路徑。 使用 FullName 完整的路徑或檔案/目錄名稱的 or Name 屬性,而不是這個方法。

適用於

另請參閱