C#快速入門教程(24)—— 路徑、目錄與檔案

曹化宇發表於2018-11-06

本課的主題,路徑(Path)、目錄(Directory)和檔案(File),在.NET Framework類庫中,它們的處理資源定義在System.IO名稱空間,程式碼檔案中注意引用。

路徑

定義目錄和檔案的位置時,路徑的處理是很重要的,在C#中,可以使用字串定義路徑,但需要注意“\”等特殊字元的處理,可以使用轉義字元或逐字字串(使用@字元定義),如"C:\test.txt"或@"C:\test.txt"都指向C盤下的test.txt檔案。

當有了一個描述字串的路徑後,就可以使用Path類進一步的處理,如下面的程式碼測試了Path類中的幾個方法。

    static void Main(string[] args)
    {
        string p = @"C:\test.txt";
        Console.WriteLine(Path.GetFileName(p));
        Console.WriteLine(Path.GetFileNameWithoutExtension(p));
        Console.WriteLine(Path.HasExtension(p));
        Console.WriteLine(Path.GetExtension(p));
        Console.WriteLine(Path.GetDirectoryName(p));
    }

程式碼執行結果如下圖所示。

enter image description here

本例中,我們使用了Path類中的幾個靜態方法,它們是:

  • GetFileName()方法,獲取檔名。
  • GetFileNameWithoutExtension()方法,獲取檔名,但不包括副檔名。
  • HasExtension()方法,判斷是否有副檔名。
  • GetExtension()方法,返回副檔名。
  • GetDirectoryName()方法,返回路徑中所包含的目錄名稱。

目錄

處理目錄時,可以關注Directory類和DirectoryInfo類,它們區別在於,Directory類主要定義了一些靜態方法,而DirectoryInfo類則需要例項化以後使用;如下面的程式碼,分別使用Directory類和DirectoryInfo類判斷C:\temp目錄是否存在。

    static void Main(string[] args)
    {
        string p = @"C:\temp";
        //
        Console.WriteLine(Directory.Exists(p));
        //
        DirectoryInfo dir = new DirectoryInfo(p);
        Console.WriteLine(dir.Exists);
    }

如果C:\temp目錄存在,會顯示兩處True,否則顯示兩個False。通過本例,大家應該可以看到使用Directory類和DirectoryInfo類的區別;實際應用中,一些基本的操作,使用Directory類的靜態方法的程式碼更少。

下面,我再瞭解一些Directory類中常用的方法,如:

  • GetDirectories()方法,返回子目錄列表,返回型別為string[],即字串陣列型別。
  • GetFiles()方法,返回目錄中中的檔案列表,返回型別同樣為string[]。
  • CreateDirectory()方法,建立目錄。
  • Delete()方法,刪除目錄。
  • Move()方法,移動目錄或修改目錄名稱。

DirectoryInfo類也包含類似的例項方法,但有些也會稍有區別,如Move()方法的功能在DirectoryInfo類使用MoveTo()方法;下面的程式碼,用於返回目錄名稱。

    static void Main(string[] args)
    {
        string p = @"C:\temp";
        DirectoryInfo dir = new DirectoryInfo(p);
        Console.WriteLine(dir.FullName);
        Console.WriteLine(dir.Name);
    }

本例中,使用FullName屬性獲取目錄的完成路徑,而Name屬性獲取不包含路徑的目錄名稱,程式碼執行結果如下圖所示。

enter image description here

檔案

這裡,我們主要了解一下File類和FileInfo類,相信大家也能猜出來了,它們與Directory和DirectoryInfo類的關係差不多,File類定義了一系列檔案操作的靜態成員,而FileInfo類則用於操作具體檔案的例項(物件)。

接下來,我們看一下文字檔案的快速操作方法。下面的程式碼,會將一些文字內容寫到C:\test.txt檔案,然後讀取並顯示。

    static void Main(string[] args)
    {
        string p = @"D:\test.txt";
        //
        string[] contents = { "第一行","第二行","line 3","line 4"};
        File.WriteAllLines(p, contents);
        //
        string[] ss = File.ReadAllLines(p);
        foreach(string s in ss)
        {
            Console.WriteLine(s);
        }
    }

程式碼執行結果如下圖所示。

enter image description here

除了讀寫多行文字的方法,File類中還有一些常用的檔案操方法可以使用,如ReadAllText()和WriteAllText()方法還可以讀寫檔案的全部文字內容,ReadAllBytes()和WriteAllBytes()方法可以讀寫檔案的全部位元組;此外,System.IO名稱空間中定義了大量的檔案操作資源,如檔案屬性、檔案位元組操作等,大家可以參考MSDN文件使用。

CHY軟體小屋原創作品!

相關文章