写了一个基于System.IO.Path类型方法的扩展类型,用于快速对文件系统路径进行操作。如下图:

其中有许多方法就是直接调用Path类型的静态方法。比如AppendPath方法内部会直接调用Path.Combine。这些方法就不需要再介绍了。下面看一些许多说明的方法:

ToDirectory方法会把一个文件路径放到文件夹路径内并返回结果,比如:

var path =@"C:\a\b\c.jpg"; Console.WriteLine(path.ToDirectory(@"D:\文件夹"));

输出:

D:\文件夹\c.jpg

ToDirectory方法还可以把一些列的文件放到一个文件夹路径内,这里还需要一个源文件夹路径。比如我们想把“C:\文件夹”内的一些文件复制到“D:\新文件夹”内,源文件夹路径就是“C:\文件夹”。通过这个方法来完成文件路径转换,如下代码:

var paths =newstring[] { @"c:\文件夹\a.jpg", @"c:\文件夹\b.cs", @"c:\文件夹\子文件夹\test.txt", @"c:\文件夹\子文件夹\子子文件夹\haha" }; var destPaths = paths.ToDirectory(@"D:\新文件夹", @"C:\文件夹"); foreach (var file in destPaths) Console.WriteLine(file);

输出:

D:\新文件夹\a.jpg D:\新文件夹\b.cs D:\新文件夹\子文件夹\test.txt D:\新文件夹\子文件夹\子子文件夹\haha

ChangeFileName和ChangeFileNameOnly方法可以改变文件的名称,他们的区别是后者不会更改扩展名,示例:

var path =@"C:\test.jpg"; Console.WriteLine(path.ChangeFileName("mgen")); Console.WriteLine(path.ChangeFileNameOnly("mgen"));

输出:

C:\mgen C:\mgen.jpg

GetDirectoryPath方法的用途和Path.GetDirectoryName方法是一致的,和Path.GetDirectoryName方法不同的是,它总是会返回上一层的目录。让我们来看Path.GetDirectoryName方法的一个问题:

var path1 =@"C:\test\mgen"; var path2 =@"C:\test\mgen\"; Console.WriteLine(Path.GetDirectoryName(path1)); Console.WriteLine(Path.GetDirectoryName(path2));

输出:

C:\test C:\test\mgen

由于第二个路径最后面有”\”,而Path.GetDirectoryName方法调用后仅会把这个”\”去掉。

而GetDirectoryPath方法的执行会先去掉后面的”\”(如果有的话),所以GetDirectoryPath方法总是会返回上一层的目录。如下GetDirectoryPath方法执行:

publicstaticstring GetDirectoryPath(thisstring path) {     path = path.TrimEnd(Path.DirectorySeparatorChar); returnPath.GetDirectoryName(path); }

Path类型的扩展方法 z的更多相关文章

  1. dynamic动态类型的扩展方法

    对于一个动态类型来说,你可以认为它包含任意成员,它们都能通过编译.但到了运行时,到底是否拥有这些成员,就真相大白了.如 dynamic test = ; Console.Write(test.Name ...

  2. C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数

    一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...

  3. [Swift通天遁地]五、高级扩展-(3)日期和时间类型的扩展方法

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  4. 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)

    1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...

  5. typescript 添加基础类型的扩展方法

    以时间转换为案例: //声明接口,也是在声明date这个基础类型要定义一个format的扩展方法,不写接口声明会报错 interface Date { Format(fmt:string):strin ...

  6. C#原始类型扩展方法—this参数修饰符

    扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual ...

  7. 编写高质量代码改善C#程序的157个建议——建议101:使用扩展方法,向现有类型“添加”方法

    建议101:使用扩展方法,向现有类型“添加”方法 考虑如何让一个sealed类型具备新的行为.以往我们会创建一个包装器类,然后为其添加方法,而这看上去一点儿也不优雅.我们也许会考虑修改设计,直接修改s ...

  8. C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)

    C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

  9. 【开源】OSharp框架解说系列(3):扩展方法

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

随机推荐

  1. c++ 小片段

    void test_string() { string sen = "Connection will be closed if there is no " "read/w ...

  2. PAT-乙级-1039. 到底买不买(20)

    1039. 到底买不买(20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 小红想买些珠子做一串自己喜欢的珠串 ...

  3. Eclipse console文本换行

    Eclipse换行主要有3个方面 格式化时编辑器文本换行 源代码注释文本换行 Eclipse控制台console显示文本换行 1和2参考 http://hi.baidu.com/ae6623/item ...

  4. List<T> 排序

    List<T>的排序 List<DataPoint> dataPointsDataPints = ...; //按RegisterAddress升序排序 dataPointsD ...

  5. WPF性能优化经验总结

    WPF性能优化一.Rendering Tier 1. 根据硬件配置的不同,WPF采用不同的Rendering Tier做渲染.下列情况请特别注意,因为在这些情况下,即使是处于Rendering Tie ...

  6. 深入浅出 Java 8 Lambda 表达式

    摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...

  7. pythn BeautifulSoup

    http://rsj217.diandian.com/post/2012-11-01/40041235132 Beautiful Soup 是用 Python 写的一个 HTML/XML 的解析器,它 ...

  8. web页面浮动回到顶部功能和浮动广告

    实现测试浮动回到顶部 法一:用js实现<%@ Page Language="C#" AutoEventWireup="true" CodeBehind=& ...

  9. codeforces #309 div1 B

    题目啰里啰嗦说了一大堆(耐心读完题目就可以秒题了) 首先我们考虑当前置换的开头的循环节的开头 1.如果是1 1->1形成循环节 问题变成i-1的子问题 2.如果是2 1->2->1形 ...

  10. 吐槽C++

    个人感觉,在c++ 道路的学习路上,遇到很多的坎坷,现在回想起来,最关键一点就是 c++知识点繁杂很多,教科书很多知识点都没有提到. 但是在实际工作中,这些没有提到的知识点,却又经常会用到(或者看开源 ...