C# 对包含文件或目录路径信息的 System.String 实例执行操作
在字符串操作中有一类比较特殊的操作,就是对包含文件或目录路径信息的 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. 如果提供了好几种轮子,那我们需要挑安全、好用的轮子。
C# 对包含文件或目录路径信息的 System.String 实例执行操作的更多相关文章
- iOS 获取文件的目录路径的几种方法 [转]
iOS 获取文件的目录路径的几种方法 2 years ago davidzhang iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. d ...
- IOS中获取各个文件的目录路径的方法和NSFileManager类
转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...
- iOS中获取各种文件的目录路径的方法
我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4453A-B453-4ADF535345ADAF344 后面的目录4434-4453A-B453-4AD ...
- (转)IOS中获取各种文件的目录路径的方法
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...
- iOS中获取各种文件的目录路径和文件
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...
- IOS中获取各种文件的目录路径的方法-备
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...
- linux文件和目录的删除、新建、移动等操作
在Linux下进行切换目录 cd 在Linux下查看当前目录下的内容 ls. ll. ls -al 如何显示当前命令所在的目录路径 pwd 在Linux下创建目录 mkdir 在L ...
- 使用File查询出所有的文件和目录的信息
public class Test34 { public static void main(String[] args) { File f=new File("f:"); File ...
- JAVA->查询并显示输入根目录下全部的文件所在目录路径
public static boolean qf(File f,boolean a){ boolean b=false; if(a==true){ File[] fl=f.li ...
随机推荐
- js获取单选按钮的值
function a(){ var v=document.getElementsByName("radio"); ;i<v.length;i++){ if(v[i].chec ...
- jQuery学习-css、class操作、动画方法的运用、jQ操作Dom节点
css操作(设置单个/多个样式.获取样式) //修改单个属性:括号之中直接是需要修改的样式名,值 css(name,value) //例:$("#one").css("b ...
- oracle exists
公司项目中有用到exists,感觉挺有用的,拷贝一些感念的东西. “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T ...
- 十分钟能学会的框架,MVC+20个常用函数
LazyPHP(以下简称LP)是一个轻框架. 之所以开发这么一个框架,是因为其他框架给的太多.在高压力的情况下,ORM和盘根错节的对象树反而将简单的页面请求处理复杂化,在调试和性能上带来反面效果. L ...
- MongoDB学习笔记—03 增删改查操作
MongoDB的CURD操作分别通过函数insert().update().find().remove()进行 MongoDB文档新增与删除 MongoDB中关于文档的新增与删除比较简单.主要通过in ...
- 文本框如果不输入任何内容提交过后是一个空字符串还是null
1.在表单不填就提交的情况下,text类型和textarea类型的表单域,提交到服务端为空 2.checkbox.readio.select等表单域在为不填情况下不会提交到服务器,也就是说服务器接收不 ...
- debian/ubuntu 下ISE安装
1. planAhead无法打开的问题 原因: debian中使用dash,跟planAhead使用的bash略有不同 解决: 将/bin/sh 的链接从dash改为bash 2. FPGA Edit ...
- iOS网络基础知识
iOS网络基础知识 1.一次HTTP请求的完整过程 (1)浏览器或应用发起Http请求,请求包含Http请求Http(请求),地址(url),协议(Http1.1)请求为头部 (2)web服务器接收到 ...
- samba server install
要求: create vnc service for win7 access it via vnc viewer. 1TB disk for this Centos PC is used as Sam ...
- Linux下安装tomcat
安装tomcat之前首先安装jdk,这个看前面的帖子. 下面说centeros6.5安装tomcat7的方法: 1.将apache-tomcat-7.0.29.tar.gz文件上传到/home/zha ...