淺析C#中檔案路徑的操作_C#教程

來源:互聯網
上載者:User

在程式中對檔案操作是非常常見的,而對檔案的操作則不可避免的需要檔案的路徑,並對檔案的路徑進行一系列的操作,例如:判斷已知的路徑是一個目錄還是一個檔案,路勁是一個檔案則該檔案的名稱是什麼,檔案的副檔名名是什麼等等。在C#中並並沒有將檔案的路徑抽象為一個類,用來表示檔案路徑就是一個普通的字串。對檔案路徑的操作例如,要擷取檔案名稱,可以通過截取字串或者使用Regex來取得。

其實,在.NET類庫中,有一個專門的功能類System.IO.Path,對錶示檔案或在目錄路徑的string進行操作。下面介紹下利用Path來對檔案路徑進行的一些誒常用操作。

判斷給出的路徑或者檔案名稱是否合法

Path.GetInvalidFileNameChars() 該方法返回一個char[] 指出不能在檔案名稱中出現的字元。

/// <summary>  /// 判斷檔案名稱是否合法  /// </summary>  /// <param name="fileName">檔案名稱</param>  /// <returns>ture,合法;false,非法</returns>  public bool validFileName(string fileName)  {   if(!string.IsNullOrEmpty(fileName))   {    char [] errChars = Path.GetInvalidFileNameChars() ;    foreach(char ch in errChars)    {     if(fileName.Contains(ch.ToString()))      return false ;    }   }   else   {    return false ;   }   return true ;  }

假如檔案名稱是非法的,可以利用下面的方法,移除非法字元

/// <summary>  /// 除掉檔案名稱中的非法字元  /// </summary>  /// <param name="fileName"></param>  /// <returns>合法的檔案名稱</returns>  public string fixedFileName(string fileName)  {   char[] errChars = Path.GetInvalidFileNameChars();   StringBuilder fileNameBuilder = new StringBuilder(fileName) ;   foreach(char ch in errChars)   {    fileNameBuilder.Replace(ch.ToString(),string.Empty);   }   return fileNameBuilder.ToString();  }

同理使用Path.GetInvalidPathChars()來擷取不能在目錄路徑中出現的字元,來判斷給出的目錄路徑是否合法,並且對非法的目錄路徑進行修改。

判斷給出的路徑是目錄路徑還是檔案路徑

如果能夠確定給出的路徑是已經存在的,那麼可以使用Directory.Exists()和File.Exists()來判斷路徑是目錄還是檔案。不能確定給定的路徑存在,可以使用Path.GetFileName()擷取路徑中的檔案名稱,如能取到檔案名稱顯然路徑是一個檔案路徑,如不能則是路徑。說明,目錄路徑的最後一個字元應該是以'\'來結束。

合并路徑

有些路徑的不同部分是從不同的地方取得,這是需要將這些部分進行組合,形成一個完整的路徑。在組合的過程中不可避免的要涉及到對”\”的處理,這時可以使用Path.Combine()把路徑的不同部分組合到一起。Path.Combine()有多種形式的重載,滿足不同的需求。需要說明的是,在用Path.Combine()不接受不合法的檔案名稱或者路徑名,並且在合并時,如果某一個部分是從絕對路徑開始的,則合併作業重設為從該絕對路徑開始,捨棄前面的已經合并的路徑。例如:

string[] paths = {@"d:\archives", "2001", "e:\\", "images"};   string fullPath = Path.Combine(paths);   //fullPath 為 e:\images   Console.WriteLine(fullPath);fullPath為e:\images

擷取路徑的特定部分,如:檔案名稱,副檔名,檔案目錄等

   Path.GetFileName(path);//擷取檔案名稱    Path.GetFileNameWithoutExtension(path); //擷取檔案名稱,不帶副檔名    Path.GetExtension(path) ; //擷取副檔名    Path.GetDirectoryName(path) ; //擷取檔案目錄    Path.GetPathRoot(path) ;//擷取根目錄資訊

更具體的可以參看MSDN  http://msdn.microsoft.com/zh-cn/library/system.io.path_methods.aspx

Path其它的一些功能函數

  • Path.GetRandomFileName() 擷取一個隨機的檔案名稱或者目錄名
  • Path.GetTempFileName() 建立磁碟上唯一命名的零位元組的一個臨時檔案並返回該檔案的完整路徑
  • Path.GetTempPath() 擷取目前使用者的臨時目錄路徑
  • Path.HasExtension() 確定路徑是否包含副檔名

擷取和應用程式相關的路徑

  • System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 擷取模組的完整路徑,包括檔案名稱。
  • System.Environment.CurrentDirectory 擷取或設定應用程式當前工作目錄的完全限定路徑
  • System.IO.Directory.GetCurrentDirectory() 擷取或設定應用程式的當前工作目錄,不一定是應用程式的啟動目錄,是應用程式最後一次操作過的目錄。

環境變數相關

使用System.Environment.GetEnvironmentVariable()能夠擷取和環境變數相關的檔案路徑,例如:

  • System.Environment.GetEnvironmentVariable("windir") 擷取作業系統所在的目錄
  • System.Environment.GetEnvironmentVariable("INCLUDE") 擷取標頭檔所在的目錄
  • System.Environment.GetEnvironmentVariable("TMP") 擷取臨時目錄
  • System.Environment.GetEnvironmentVariable("Path") 擷取Path環境變數所包含的檔案目錄

自然,使用System.Environment.SetEnvironmentVariable() 能夠設定環境變數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.