一、介绍
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(); } } }