一、介紹
Path類如其名,是專門用來處理和路徑相關的事情的,需要引用System.IO。Path類是一個靜態類,因此它所有的方法及字段都是靜態的,訪問的時候不能用對象去訪問,而是直接通過類名訪問。
二、成員介紹
先介紹幾個只讀字段:
字段 | 功能 |
char DirectorySeparatorChar; | 得到目錄分隔符。在windows里,目錄分隔符是'\'。 |
char AltDirectorySeparatorChar; | 得到替換的目錄分隔符。返回結果是'/',意思是用'/'也能進行目錄分隔。 |
char VolumeSeparatorChar; | 得到卷分隔符。在windows中,比如"C:\Users"表示一個路徑,':'就是卷分隔符。 |
char[] InvalidPathChars; | 得到不能在路徑中出現的字符,但這個字段被Obsolete修飾,表示它已經過時,不建議再使用這個字段。下一節介紹兩個方法可以代替這個字段。 |
char PathSeparator; | 得到在環境變量中分隔不同路徑的符號,其值是';'。意思是設置環境變量的時候,用';'分隔不同的路徑。 |
方法介紹:
方法 | 功能 |
string ChangeExtension(string path, string extension); | 改變路徑字符串的擴展名。將path包含的擴展名替換為extension。 比如調用Path.ChangeExtension("xxx.mp4", "avi"),返回的結果就是"xxx.avi"。 |
string Combine(string path1, string path2); string Combine(string path1, string path2, string path3); string Combine(string path1, string path2, string path3, string path4); string Combine(params string[] paths); |
Combine有4種重載方法,它的作用是將傳入的字符串組合成一個路徑。 其實只要有最后一個方法就夠了,我也不知道為什么前面還要寫前面三個方法。 比如調用Path.Combine("Suzkfly", "Music", "XuSong", "2009", "zidingyi"); 得到的結果是:"Suzkfly\Music\XuSong\2009\zidingyi" |
string GetDirectoryName(string path); | 獲得目錄名,比如調用Path.GetDirectoryName(@"C:\Users\Suzkfly\Desktop\test.txt"); 得到的結果是:@"C:\Users\Suzkfly\Desktop"。它會把文件名和最后一個'\'去掉。 它的機制就是從字符串的末尾開始,往前刪除字符,直到刪除第一個'\'為止。 也就是說如果傳入的路徑為@"C:\Users\Suzkfly\Desktop\",就會得到@"C:\Users\Suzkfly\Desktop", 如果傳入的路徑為@"C:\Users\Suzkfly\Desktop",就會得到@"C:\Users\Suzkfly"。 |
string GetExtension(string path); | 返回指定路徑字符串的擴展名。比如調用Path.GetExtension(@"C:\Users\Suzkfly\Desktop\test.txt");, 會得到".txt",注意會把'.'也返回。 |
string GetFileName(string path); | 返回指定路徑字符串中的文件名+擴展名。 比如調用Path.GetFileName(@"C:\Users\Suzkfly\Desktop\test.txt");,會得到test.txt。 |
string GetFileNameWithoutExtension(string path); | 返回不具有擴展名的指定路徑字符串的文件名。 比如調用 Path.GetFileNameWithoutExtension(@"C:/Users/Suzkfly/Desktop\test.txt");會得到"test"。 |
string GetFullPath(string path); | 返回指定路徑的完整路徑。這里返回的路徑是基於本程序當前運行時所處路徑。 另外要注意".",表示當前路徑,".."表示上一級路徑,比如我現在運行的這個程序所在的路徑是@"C:\Users\Suzkfly\Desktop", 那么如果我調用Path.GetFullPath("."),就會返回@"C:\Users\Suzkfly\Desktop", 如果調用Path.GetFullPath(@"..\.."),就會返回@"C:\Users"。 |
char[] GetInvalidFileNameChars(); | 獲取不允許出現在文件名中的字符,並將它們放到數組中返回。見第三節。 |
char[] GetInvalidPathChars(); | 獲取不允許出現在路徑名中的字符,並將它們放到數組中返回。見第三節。 |
string GetPathRoot(string path); | 獲取指定路徑的根目錄信息。如果傳入@"C:\Users\Suzkfly\Desktop\test.txt",就會得到@"C:\", 如果傳入的路徑中不包含根目錄就返回空字符串。該方法是進行簡單的字符串處理,意味着,它不能通過"."或".."來得到路徑。 如果要這么做的話,先用GetFullPath得到完整路徑。 |
string GetRandomFileName(); | 返回隨機文件夾名或文件名。就是隨機得到一個名字。 |
string GetTempFileName(); | 在磁盤上創建唯一命名的零字節的臨時文件,並返回該文件的完整路徑。調用該方法要注意2點, 第一是調用該方法后會在系統中生成文件,第二是生成的文件不會與已經存在的文件重名。 下一個方法指定臨時文件所在的路徑。 |
string GetTempPath(); | 返回當前用戶的臨時文件夾的路徑。 |
bool HasExtension(string path); | 確定路徑是否包括文件擴展名。 |
bool IsPathRooted(string path); | 確定路徑中是否包含根(盤符)。 |
三、不允許出現在文件名和路徑名中的字符
這些字符都是特殊字符,我在Win10中測試,得到的結果如下
其中黃底的字符,既不能出現在文件名中,也不能出現在路徑名中,綠底的不能出現在文件名中(意味着可以出現在路徑名中?但是文件夾本身也是文件,它是不能包含這些字符的,所以不知道這有什么意義)。
四、測試代碼
using System; using System.IO; namespace suzkfly { class Program { static void Main(string[] args) { Console.WriteLine("1\t" + Path.DirectorySeparatorChar); Console.WriteLine("2\t" + Path.AltDirectorySeparatorChar); Console.WriteLine("3\t" + Path.VolumeSeparatorChar); Console.WriteLine("4\t" + Path.PathSeparator); Console.WriteLine("5\t" + Path.ChangeExtension("xxx.mp4", "avi")); Console.WriteLine("6\t" + Path.Combine("Suzkfly", "Music", "XuSong", "2009", "zidingyi")); Console.WriteLine("7\t" + Path.GetDirectoryName(@"C:\Users\Suzkfly\Desktop\test.txt")); Console.WriteLine("8\t" + Path.GetExtension(@"C:\Users\Suzkfly\Desktop\test.txt")); Console.WriteLine("9\t" + Path.GetFileName(@"C:\Users\Suzkfly\Desktop\test.txt")); Console.WriteLine("10\t" + Path.GetFileNameWithoutExtension(@"C:/Users/Suzkfly/Desktop\test.txt")); Console.WriteLine("11\t" + Path.GetFullPath(@".")); char[] invalidfilenamechars = Path.GetInvalidFileNameChars(); Console.Write("12\t"); foreach (var i in invalidfilenamechars) { Console.Write(Convert.ToInt32(i)); Console.Write(' '); } Console.WriteLine(); char[] invalidpathchars = Path.GetInvalidPathChars(); Console.Write("13\t"); foreach (char i in invalidpathchars) { Console.Write(Convert.ToInt32(i)); Console.Write(' '); } Console.WriteLine(); Console.WriteLine("14\t" + Path.GetPathRoot(@"C:\Users\Suzkfly\Desktop\test.txt")); Console.WriteLine("15\t" + Path.GetRandomFileName()); //不會創建文件 Console.WriteLine("16\t" + Path.GetTempFileName()); //會在C:\Users\Suzkfly\AppData\Local\Temp目錄下創建文件 Console.WriteLine("17\t" + Path.GetTempPath()); Console.WriteLine("18\t" + Path.HasExtension(@"C:\Users\Suzkfly\Desktop\test")); Console.WriteLine("19\t" + Path.IsPathRooted(@"D:\Users\Suzkfly\Desktop\test.txt")); Console.ReadKey(); } } }