淺析C#中文件路徑的操作
在程序中對(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()有多種形式的重載,滿(mǎn)足不同的需求。需要說(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)前用戶(hù)的臨時(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)境變量
上一篇:.NET C#利用ZXing生成、識(shí)別二維碼/條形碼
欄 目:C#教程
下一篇:C#創(chuàng)建安全的字典(Dictionary)存儲(chǔ)結(jié)構(gòu)
本文標(biāo)題:淺析C#中文件路徑的操作
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6107.html
您可能感興趣的文章
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并打開(kāi)的方法
- 01-10C#實(shí)現(xiàn)多線(xiàn)程下載文件的方法
- 01-10C#實(shí)現(xiàn)Winform中打開(kāi)網(wǎng)頁(yè)頁(yè)面的方法
- 01-10C#文件斷點(diǎn)續(xù)傳實(shí)現(xiàn)方法
- 01-10C#實(shí)現(xiàn)由四周向中心縮小的窗體退出特效
- 01-10C#實(shí)現(xiàn)多線(xiàn)程寫(xiě)入同一個(gè)文件的方法
- 01-10Extjs4如何處理后臺(tái)json數(shù)據(jù)中日期和時(shí)間
- 01-10C#中DataGridView常用操作實(shí)例小結(jié)
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10C#實(shí)現(xiàn)讀取被進(jìn)程占用的文件實(shí)現(xiàn)方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻 器左下角滾動(dòng)新
- 01-10C#停止線(xiàn)程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?