C# 对包含文件或目录路径信息的 System.String 实例执行操作
来源:互联网 发布:淘宝宝贝规格颜色分类 编辑:程序博客网 时间:2024/06/07 15:47
在字符串操作中有一类比较特殊的操作,就是对包含文件或目录路径信息的 System.String 实例执行操作。比如根据一个表示路径的字符串获取其代表的文件名称、文件夹路径、文件扩展名等。在很多时候,我们喜欢用substring加indexof来进行字符串的修改。代码如下:
string filePath = @"C:\test\test2\test3.txt";//通过substring加indexof方式获取文件信息string fileName = filePath.Substring(filePath.LastIndexOf('\\') + 1);//通过substring加indexof方式获取文件信息string fileExtenstion = filePath.Substring(filePath.LastIndexOf('.') + 1);//通过substring加indexof方式获取文件信息string fileNameWithOutExtenstion = filePath.Substring( filePath.LastIndexOf('\\') + 1, filePath.LastIndexOf('.') - filePath.LastIndexOf('\\') - 1);
上面这种做法前两个还算比较好写,只要注意下+1就行了,但是最后一个却不是一下就能写对的,我调了两次才改对的。而且这种代码的可阅读性非常不好,不加注释的话,新手很难一下看明白。下面是另一种写法,主要运用FileInfo这个类。
var fileInfo = new FileInfo(filePath);string name = fileInfo.Name;string extens = fileInfo.Extension;string nameWithOutExtenstion = name.Remove(name.IndexOf(".", StringComparison.Ordinal));
上面的代码看起来要比最开始的substring+indexof方案阅读性更好,而且写的时候更靠谱,不用担心出现像上面那种忘记“+1”的错误。但是存在如下问题:
1. 引入了FileInfo这个类,这是一个文件操作的类,仅仅为了获取文件名称等有些大材小用;2. 还是没法获取不带文件扩展名的文件名称;
其实.Net 给我们提供了更好的解决方案,就是大家经常用到的Path类。完成上面功能的代码如下:
string nameFromPath = Path.GetFileName(filePath);string extenstionFromPath = Path.GetExtension(filePath);string nameWithoutExtensionFromPath = Path.GetFileNameWithoutExtension(filePath);
上述代码非常简洁易懂,而且写法高效,非常值得推荐。以下是Path的一些其它API:
//得到文件的目录string dirName = Path.GetDirectoryName(filePath);//得到文件的全路径string fullPath = Path.GetFullPath(filePath);// 获取指定路径的根目录信息。//如果 path 为 null,则为 null;//如果 path 不包含根目录信息(比如相对路径),则为空。string pathRoot = Path.GetPathRoot(filePath);//得到随机文件夹名或文件名,省得起名字了,但注意这个名字带后缀。string randomName = Path.GetRandomFileName();// 返回当前用户的临时文件夹的路径,以反斜杠结尾。string tempPath = Path.GetTempPath();//获取包含不允许在文件名中使用的字符的数组,在写界面的时候可以增加输入合法性的判断char[] invalidFileName = Path.GetInvalidFileNameChars();//获取包含不允许在路径名中使用的字符的数组char[] invalidPathName = Path.GetInvalidPathChars();//将字符串数组组合成一个路径。(比以前好用多了,增加不定参数的支持)string combinePath = Path.Combine(filePath1, filePath2, filePath3);//获取一个值,该值指示指定的路径字符串是否包含根bool isContainsRoot = Path.IsPathRooted(filePath);
除了上述方法之外,还提供了一些其它readonly的变量,在我们写代码的时候都可以拿来用。具体如下:
// 摘要: // 提供平台特定的替换字符,该替换字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。public static readonly char AltDirectorySeparatorChar;//// 摘要: // 提供平台特定的字符,该字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。public static readonly char DirectorySeparatorChar;//// 摘要: // 用于在环境变量中分隔路径字符串的平台特定的分隔符。public static readonly char PathSeparator;//// 摘要: // 提供平台特定的卷分隔符。public static readonly char VolumeSeparatorChar;
总结
1. 如果已经提供了轮子,那我们就不要自己造轮子;2. 如果提供了好几种轮子,那我们需要挑安全、好用的轮子。
0 0
- C# 对包含文件或目录路径信息的 System.String 实例执行操作
- matlab对文件目录路径的操作
- matlab对文件目录路径的操作
- matlab对文件目录路径的操作
- matlab对文件目录路径的操作
- Matlab对文件目录路径的操作
- matlab对文件目录路径的操作
- matlab对文件目录路径的操作
- cmd命令下cd命令对文件目录或路径的操作
- C#对于文件的目录和路径的操作
- C# 对路径的操作
- C#对Windows文件/文件夹/目录的一些操作总结
- C#中对文件夹及文件信息的操作
- C#对文件或图片操作
- C#实现对图片文件的压缩、裁剪操作实例
- C#上传文件报错System.UnauthorizedAccessException: 对路径XXX的访问被拒绝。
- ftp 请求的操作未执行(例如由于找不到文件或目录、无访问权限)
- linux下删除包含特殊符号的文件或目录
- 提高Java架构师和程序员效率的10个工具
- 排序算法(二):堆排序
- 天声人語 20150204
- CSS 中 px 和 em
- jquery获取input表单值的代码
- C# 对包含文件或目录路径信息的 System.String 实例执行操作
- java解析xml
- [Leetcode] Single Number Java
- ios8 Size Class使用
- Monkey 命令使用说明
- 日经春秋 20150204
- LeetCode 14.Longest Common Prefix
- 外挂辅助技术-更新任务列表分析
- Linux 实时信号程序中锁的探索