C# 对包含文件或目录路径信息的 System.String 实例执行操作

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;
时间: 2024-08-02 15:13:50

C# 对包含文件或目录路径信息的 System.String 实例执行操作的相关文章

IOS中获取各个文件的目录路径的方法和NSFileManager类

转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory()), 手动保存的文件在documents文件里 Nsuserdefaults保存的文件在tmp文件夹里 1.Documents 目录:您应该将所有

IOS中获取各种文件的目录路径的方法

iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory()), 手动保存的文件在documents文件里 Nsuserdefaults保存的文件在tmp文件夹里 1.Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它应该定期备份的信息. 2.AppName.app 目录:这是应用程序的程序包目录,

iOS 获取文件的目录路径的几种方法 [转]

iOS 获取文件的目录路径的几种方法 2 years ago davidzhang iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory())手动保存的文件在documents文件里 Nsuserdefaults保存的文件在tmp文件夹里 1.Documents 目录:您应该将所有的应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它应该

在使用Eclipse时出现的两个问题:“搞定 NiosII 工程文件夹目录路径改变”与“Connected system ID hash not found on target at expected base address”

问题一: “搞定 NiosII 工程文件夹目录路径改变”的过程中,按照<NiosII的奇幻漂流-v2.0.pdf>这本书附录一章<20.2 四步搞定 NiosII 工程文件夹目录路径改变>所说的方法进行问题解决的时候,总是会出现一些小问题,例如有一个问题“xxx.sopcinfo could not be found.”最后只能删掉工程,重建project,copy源码.虽然最后能够解决路径问题,但花费精力过多,无数次的删除原工程下的project,无数次的自己重建,虽然也能解决问

《Linux学习并不难》文件目录管理(9):mv命令文件和目录改名、移动文件和目录路径

7.9  <Linux学习并不难>文件目录管理(9):mv命令文件和目录改名.移动文件和目录路径 使用mv命令可以对文件和目录更改名称以及移动文件和目录的路径. 命令语法: mv [选项] [源文件|目录] [目标文件|目录] 命令中各选项的含义如表所示. 选项 选项含义 -i 覆盖前询问 -f 覆盖前不询问 -n 不覆盖已存在的文件 例:将/root/pic目录下所有的后缀名为".png"的文件移动到/usr/local/share/pic目录下. [[email pro

(转)IOS中获取各种文件的目录路径的方法

iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory()), 手动保存的文件在documents文件里 Nsuserdefaults保存的文件在tmp文件夹里 1.Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它应该定期备份的信息. 2.AppName.app 目录:这是应用程序的程序包目录,

file标签之act=info,查看文件或目录属性信息

功能: ·        查看文件或目录的详细属性信息,如:是否存在.名称.长度.读.写等 用法: <file act=info[id=书包名]>相对路径的文件名</file> ·        act=info:查看属性操作 ·        id:返回的书包名(可选,默认为标签名file) 返回: ·        canRead:true|false,是否能读 ·        canWrite:true|false,是否能写 ·        exists:true|fal

ls--查看文件或者目录的信息

ls  options  DIR/FILE options: -l 列出详细的信息 -d 列出目录的信息 -i 查看文件的iNode号 -a 列出所有文件,包括隐藏文件 -t 以修改时间排序列出所有文件 -h 文件大小以方便阅读的方式显示 选项可根据需要组合使用 如: 目录/tmp 的详细信息如上,其中drwxr-xr-x 2  root   root  4095 12-01 20:52bin的意义如下: 2-代表硬链接数                         所有者 所属组  文件大

file标签之act=info,查看文件或目录属性信息(例2:查看目录属性)

例2: 查看目录属性 <fileid=file act=info>base</file> 查看base目录的属性,返回属性信息及子目录属性信息列表 显示返回的属性信息 <for [email protected]{file:getWidth}> <tr><td>@{file:@{for:getSuffix}}</td><tdhtml>@{file:@{file:@{for:getSuffix}}}</td>&l