国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

淺析C#中文件路徑的操作

2019-10-29 21:17:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在程序中對(duì)文件操作是非常常見(jiàn)的,而對(duì)文件的操作則不可避免的需要文件的路徑,并對(duì)文件的路徑進(jìn)行一系列的操作,例如:判斷已知的路徑是一個(gè)目錄還是一個(gè)文件,路勁是一個(gè)文件則該文件的名稱(chēng)是什么,文件的擴(kuò)展名名是什么等等。在C#中并并沒(méi)有將文件的路徑抽象為一個(gè)類(lèi),用來(lái)表示文件路徑就是一個(gè)普通的字符串。對(duì)文件路徑的操作例如,要獲取文件名稱(chēng),可以通過(guò)截取字符串或者使用正則表達(dá)式來(lái)取得。

其實(shí),在.NET類(lèi)庫(kù)中,有一個(gè)專(zhuān)門(mén)的功能類(lèi)System.IO.Path,對(duì)表示文件或在目錄路徑的string進(jìn)行操作。下面介紹下利用Path來(lái)對(duì)文件路徑進(jìn)行的一些誒常用操作。

判斷給出的路徑或者文件名是否合法

Path.GetInvalidFileNameChars() 該方法返回一個(gè)char[] 指出不能在文件名中出現(xiàn)的字符。

/// <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 ;  }

假如文件名稱(chēng)是非法的,可以利用下面的方法,移除非法字符

/// <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()來(lái)獲取不能在目錄路徑中出現(xiàn)的字符,來(lái)判斷給出的目錄路徑是否合法,并且對(duì)非法的目錄路徑進(jìn)行修改。

判斷給出的路徑是目錄路徑還是文件路徑

如果能夠確定給出的路徑是已經(jīng)存在的,那么可以使用Directory.Exists()和File.Exists()來(lái)判斷路徑是目錄還是文件。不能確定給定的路徑存在,可以使用Path.GetFileName()獲取路徑中的文件名,如能取到文件名顯然路徑是一個(gè)文件路徑,如不能則是路徑。說(shuō)明,目錄路徑的最后一個(gè)字符應(yīng)該是以'/'來(lái)結(jié)束。

合并路徑

有些路徑的不同部分是從不同的地方取得,這是需要將這些部分進(jìn)行組合,形成一個(gè)完整的路徑。在組合的過(guò)程中不可避免的要涉及到對(duì)”/”的處理,這時(shí)可以使用Path.Combine()把路徑的不同部分組合到一起。Path.Combine()有多種形式的重載,滿足不同的需求。需要說(shuō)明的是,在用Path.Combine()不接受不合法的文件名或者路徑名,并且在合并時(shí),如果某一個(gè)部分是從絕對(duì)路徑開(kāi)始的,則合并操作重置為從該絕對(duì)路徑開(kāi)始,舍棄前面的已經(jīng)合并的路徑。例如:

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

獲取路徑的特定部分,如:文件名,擴(kuò)展名,文件目錄等

   Path.GetFileName(path);//獲取文件名    Path.GetFileNameWithoutExtension(path); //獲取文件名,不帶擴(kuò)展名    Path.GetExtension(path) ; //獲取文件擴(kuò)展名    Path.GetDirectoryName(path) ; //獲取文件目錄    Path.GetPathRoot(path) ;//獲取根目錄信息

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

Path其它的一些功能函數(shù)

  • Path.GetRandomFileName() 獲取一個(gè)隨機(jī)的文件名或者目錄名
  • Path.GetTempFileName() 創(chuàng)建磁盤(pán)上唯一命名的零字節(jié)的一個(gè)臨時(shí)文件并返回該文件的完整路徑
  • Path.GetTempPath() 獲取當(dāng)前用戶的臨時(shí)目錄路徑
  • Path.HasExtension() 確定路徑是否包含文件擴(kuò)展名

獲取和應(yīng)用程序相關(guān)的路徑

  • System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 獲取模塊的完整路徑,包括文件名。
  • System.Environment.CurrentDirectory 獲取或設(shè)置應(yīng)用程序當(dāng)前工作目錄的完全限定路徑
  • System.IO.Directory.GetCurrentDirectory() 獲取或設(shè)置應(yīng)用程序的當(dāng)前工作目錄,不一定是應(yīng)用程序的啟動(dòng)目錄,是應(yīng)用程序最后一次操作過(guò)的目錄。

環(huán)境變量相關(guān)

使用System.Environment.GetEnvironmentVariable()能夠獲取和環(huán)境變量相關(guān)的文件路徑,例如:

  • System.Environment.GetEnvironmentVariable("windir") 獲取操作系統(tǒng)所在的目錄
  • System.Environment.GetEnvironmentVariable("INCLUDE") 獲取頭文件所在的目錄
  • System.Environment.GetEnvironmentVariable("TMP") 獲取臨時(shí)目錄
  • System.Environment.GetEnvironmentVariable("Path") 獲取Path環(huán)境變量所包含的文件目錄

自然,使用System.Environment.SetEnvironmentVariable() 能夠設(shè)置環(huán)境變量


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到c#教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丰镇市| 库伦旗| 云霄县| 宝兴县| 庐江县| 屏山县| 普宁市| 扬中市| 镇平县| 镇安县| 搜索| 尉犁县| 长武县| 垫江县| 滨州市| 襄垣县| 石阡县| 石棉县| 鸡西市| 海丰县| 盘锦市| 鄂温| 长垣县| 肇庆市| 西乌| 页游| 双柏县| 乌拉特后旗| 弋阳县| 东明县| 上饶县| 阳东县| 湖南省| 达孜县| 慈利县| 福清市| 比如县| 临沂市| 夏河县| 睢宁县| 富源县|