操作目錄

一般我們透過 DirectoryInfo 操作目錄系統,以下是建立DirectoryInfo物件所需的類別建構式:
DirectoryInfo(string path)
其中的 string 參數 path 代表要操作的目錄路徑字串,你必須輸入指定的路徑名稱以建立參考此路徑的 DirectoryInfo 物件,一旦物件建立,便可以引用其提供的方法成員,進行目錄操作。

DirectoryInfo 類別所提供的方法中, GetDirectories 用以取得指定目錄下的所有子目錄,其回傳一個包含所有子目錄的 DirectoryInfo 陣列物件, GetFiles 則用以取得目錄底下所有的檔案清單,其回傳值則為 FileInfo 陣列物件,這個陣列包含目錄下的所有檔案,利用迴圈即可將所有的內容成員取出。
// DirectoryInfoDemo
class Program
{
    static void Main(string[] args)
    {
Console.Write("輸入欲解析之目錄路徑:");
        string path = Console.ReadLine();
        DirectoryInfo dinfo = new DirectoryInfo(path);
        DirectoryInfo[] dinfos = dinfo.GetDirectories();
        foreach (DirectoryInfo subdinfo in dinfos)
        {
            Console.WriteLine("\n子目錄:{0} 所屬根目錄 ... {1} ",
                subdinfo.Name, subdinfo.Root);
            Console.WriteLine("\t建立日期:{0}",
               subdinfo.CreationTime);
            Console.WriteLine("\t最後存取日期:{0}",
                subdinfo.LastAccessTime);
            Console.WriteLine("\t最後寫入日期:{0}",
                subdinfo.LastWriteTime);
        }
        Console.ReadKey();
    }
}
其中取得使用者要解析的路徑字串path,將其傳入DirectoryInfo類別建立實體物件進行解析,接下來引用其 GetDirectories 方法取得路徑底下所有的子目錄,回傳的結果是封裝所有子目錄的DirectoryInfo 物件陣列。

foreach 敘述逐一取出 DirectoryInfo 物件陣列中的子目錄,引用 DirectoryInfo 類別的 Name 屬性,取得目錄名稱,接下來引用 LastAccessTime 等屬性,分別取得目錄物件最後存取日期時間等特定的目錄資訊輸出。

以下是執行畫面,於第一行輸入欲解析之目錄路徑,例如「D:\Book」,按一下Enter列舉所有的子目錄內容。
輸入欲解析之目錄路徑:D:\Book

子目錄:Developing 所屬根目錄 ... D:\
        建立日期:2018/9/28 上午 09:57:34
        最後存取日期:2019/5/25 下午 10:31:38
        最後寫入日期:2019/5/25 下午 10:31:38

子目錄:PublishingProcess 所屬根目錄 ... D:\
        建立日期:2018/9/28 上午 07:13:00
        最後存取日期:2019/3/21 上午 09:50:05
        最後寫入日期:2019/3/21 上午 09:50:05

子目錄:_Marketing 所屬根目錄 ... D:\
        建立日期:2018/11/12 下午 10:07:14
        最後存取日期:2019/3/14 下午 08:18:53
        最後寫入日期:2019/3/14 下午 08:18:53
DirectoryInfo亦提供建立與刪除目錄的方法,如果要建立新目錄,只要將建立新目錄所需的路徑作為參數,建立DirectoryInfo物件,再引用Create方法即可,刪除則引用Delete方法。
// DirectoryInfoDDemo
class Program
{
    static void Main(string[] args)
    {
        try
        {
            Console.Write("輸入欲建立之目錄路徑:");
            string path = Console.ReadLine();
            DirectoryInfo dinfo = new DirectoryInfo(path);
            dinfo.Create();
            Console.WriteLine("建立目錄完成。");
            Console.Write("輸入「y」刪除新建目錄 {0}:", path);
            char c = Console.ReadKey().KeyChar;
            Console.WriteLine("");
            if (c == 'y')
            {
                dinfo.Delete();
                Console.WriteLine("目錄 {0} 刪除完成", path);
            }
            Console.WriteLine("\n按任意鍵離開 ...");
            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadKey();
        }
    }
}
這段範例程式碼中,先引用Create建立一個指定路徑的目錄,再顯示提示訊息,如果使用者輸入「y」,則引用Delete方法將建立的新目錄刪除。
輸入欲建立之目錄路徑:E:\TestDir
建立目錄完成。
輸入「y」刪除新建目錄 E:\TestDir:y
目錄 E:\TestDir 刪除完成

按任意鍵離開 ...
如果沒有輸入其它非「y」的任意字元,則新目錄會建立在指定的路徑下,以此為例,在路徑E底下會新增一個TestDir子目錄。

Delete方法只能刪除空目錄,如果目錄底下有子目錄,則會導致刪除作業失敗,並回傳錯誤訊息「目錄不是空的」,例如以下的執行結果:
輸入欲建立之目錄路徑:E:\AAA
建立目錄完成。
輸入「y」刪除新建目錄 E:\AAA:y
目錄不是空的。
在建立AAA目錄之後,於其中建立任何檔案,然後輸入「y」將其刪除,最後出現錯誤。


沒有留言: