一、介绍
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中测试,得到的结果如下
其中黄底的字符,既不能出现在文件名中,也不能出现在路径名中,绿底的不能出现在文件名中(意味着可以出现在路径名中?但是文件夹本身也是文件,它是不能包含这些字符的,所以不知道这有什么意义)。
四、测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 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(); } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?