【转】Path.Combine (合并两个路径字符串)方法的一些使用细节

System.IO.Path.Combine 简单来说,就是合并两个路径字符串。
比如下面这个调用,
Path.Combine(@“C:\11”,“aa.txt”)

返回的字符串路径为:
C:\11\aa.txt

这个方法的声明如下:
public static string Combine ( string path1, string path2 )

我们在合并一些目录的时候,它的两个参数有些特殊限制,下面我们就来依次看这些特殊限制

1、如果其中任意一个参数为 null ,会抛出异常:
An unhandled exception of type ‘System.ArgumentNullException’ occurred in mscorlib.dll
Additional information: Value cannot be null.

2、如果指定的路径其中一个是零长度字符串,则该方法返回另一个路径。当然,两个都是零长度字符串,则返回的就是 string.Empty ;

3、如果 path2 包含绝对路径,则该方法直接返回 path2。
比如:
string tmp = Path.Combine(@“C:\11”, @“D:\aa.txt”); tmp = @“D:\aa.txt”
string tmp = Path.Combine(@"C:\11",    @"\aa.txt"); tmp = @"\aa.txt"

4、 path2 不应以 \ 和 / 开头, 如果是这个两个字符开头的,则返回 path2 。
比如以下代码:
string p1 = “C:\aa\”;
string p2 = “C:\aa”;

string p12 = “\p12”;
string p13 = “\p13\”;
string p15 = “/p13/”;

Console.WriteLine(Path.Combine(p1, p12));
Console.WriteLine(Path.Combine(p1, p13));
Console.WriteLine(Path.Combine(p1, p15));
Console.WriteLine(Path.Combine(p2, p12));
Console.WriteLine(Path.Combine(p2, p13));
Console.WriteLine(Path.Combine(p2, p15));
依次显示的是:
\p12
\p13
/p13/
\p12
\p13
/p13/

该函数工作原理

如果 path1 不是一个驱动器引用(即不是"C:“或"D:”)而且不是以 DirectorySeparatorChar、AltDirectorySeparatorChar 或 VolumeSeparatorChar 中定义的有效分隔符结束,则在串联前将 DirectorySeparatorChar 追加到 path1 中。

如果 path2 不包括根(例如,如果 path2 没有以分隔符或驱动器规格起始),则结果是两个路径的串联,具有介于其间的分隔符。如果 path2 包括根,则返回 path2。

由于有空白时不进行参数分析,如果 path2 为" c:\ ",则将其追加到 path1,而不是仅返回 path2。

不是目录和文件名的所有无效字符都被 Combine 方法解释为不可接受的,因为您可以将这些字符用于搜索通配符。例如,尽管 Path.Combine(“c:\”, “*.txt”) 可能是无效的(如果您要根据它创建一个文件),但它作为搜索字符串是有效的。因此 Combine 方法成功解释它。

Path.DirectorySeparatorChar 字段
提供平台特定的字符,该字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
该字段的值在 Unix 上为斜杠("/"),在 Windows 和 Macintosh 操作系统上为反斜杠("")。

Path.AltDirectorySeparatorChar 字段
提供平台特定的替换字符,该替换字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
该字段的值在 Unix 上为反斜杠(""),在 Windows 和 Macintosh 操作系统上为斜杠("/")。

Path.VolumeSeparatorChar 字段
提供平台特定的卷分隔符。
该字段的值在 Windows 和 Macintosh 上为冒号(":"),在 Unix 操作系统上为斜杠("/")。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 正则表达式 开头 结尾_Java-正则表达式匹配 #开头结尾

引包import java.util.regex.Matcher;import java.util.regex.Pattern;方法1:// 匹配 #开头结尾中,#以及中间得字符串 #xxx 替换为 "" #123 匹配#123String tableModle "#123#2#3#4";Pattern pPattern.compile("…

java比赛题目_【蓝桥杯2016第七届比赛题目】JAVA A组

1 煤球数目有一堆煤球,堆成三角棱锥形。具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填表…

【转】C#技术漫谈之垃圾回收机制(GC)

摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助。 GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久。早在1958年,由鼎鼎大名的图林奖得主John…

【转】git hub 使用小结

【转自:https://blog.csdn.net/yj310873325/article/details/79255134】 1.创建账号: https://github.com/ 2.下载客户端:https://git-scm.com/download 这是命令行模式,用着比较舒服,不是github的客户端,一路默认安…

java 服务降级_微服务的降级学习

参考博客:https://blog.csdn.net/glory1234work2115/article/details/51626322https://blog.csdn.net/xiaofei0859/article/details/79180406什么是降级?1.开关先讲一下开关的由来,例如京东在6月18日做店庆促销活动,在交易下单环节…

【转】细说.NET 中的多线程 (一 概念)

为什么使用多线程 1.使用户界面能够及时响应用户的输入 当某个应用程序在进行大量运算时候,为了保证应用程序能够随时响应客户的输入,这个时候我们往往需要让大量运算和响应用户输入这两个行为在不同的线程中进行。 2.效率原因 应用程序经常需要等待一…

java内存加载dll_jacob调用dll控件,是否要执行内存释放,具体方法怎么写

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼程序用jacob调用dll控件,执行考勤的一些数据获取,可是当很多人同时操作时,会把tomcat关掉,然后产生一个错误文件,部分内容如下:## An unexpected error has been detected by HotSpot…

【转】细说.NET中的多线程 (二 线程池)

上一章我们了解到,由于线程的创建,销毁都是需要耗费大量资源和时间的,开发者应该非常节约的使用线程资源。最好的办法是使用线程池,线程池能够避免当前进程中大量的线程导致操作系统不停的进行线程切换,当线程数量到达…

java第二章_零基础学Java第二章

一、第一个代码案例1.1. HelloWorld案例1.1.1 代码执行流程我们写的代码都将以.java开头的文件保存,经过类编译器编译成.class的字节码文件,然后通过解释器翻译与机器交流1.1.1 代码执行流程1. 编写代码步骤首先定义一个类:public class 类名…

【转】细说.NET中的多线程 (三 使用Task)

上一节我们介绍了线程池相关的概念以及用法。我们可以发现ThreadPool. QueueUserWorkItem是一种起了线程之后就不管了的做法。但是实际应用过程,我们往往会有更多的需求,比如如何更简单的知道线程池里面的某些线程什么时候结束,线程结束后如何…

java volidate_volidate 学习

一:Volatile 变量具有synchronized的可见性,有序性 特性,但是不具备原子特性二:java memory model(jmm) java 内存模型形象理解见下图Java Memory Modela:java 线程读取共享内存变量流程:线程2 --> JMM …

【转】ABP源码分析一:整体项目结构及目录

ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序。 整个Abp的Infrastructure是以Abp这个package为核心模块(core)15个模块(module).其中13个依赖于Abp这个核心包。另外两个包(FluentMigration,Web.Resources)相对独…

JavaScript 中的短路求值(if语句简洁写法--逻辑运算符||和的高级用法)

在JavaScript中,Short-Circuit Evaluation(短路求值)是一种逻辑运算的行为,其中表达式的求值在达到不必要的部分时就提前终止(所以短路一词非常贴切)。这种行为可以通过逻辑运算符(例如&&am…

【转】ABP源码分析二:ABP中配置的注册和初始化

一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法。执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数必然已完成了执行。 ABP开始的地方就是HttpApplication的构造函数。 如下图一,Abp定义了一…

python文本进度条94页_Python学习笔记 | 实例4:文本进度条

本文为中国大学MOOC《Python语言程序设计》课程学习笔记,课程主讲:嵩天老师,练习平台:Python123,参考教材:《Python语言程序设计基础》文本进度条-简单的开始import timescale 10print("----执行开始…

【转】ABP源码分析三:ABP Module

Abp是基于模块化设计思想进行构建的。开发人员可以将自定义的功能以模块(module)的形式集成到ABP中。具体的功能都可以设计成一个单独的Module。Abp底层框架提供便捷的方法集成每个Module.下图是所有Abp自带的module.AbpModule是所有Module的基类&#x…

java weka 聚类_简单开源数据挖掘工具weka进行文本聚类

目前非代码的数据挖掘工具很多,但非开源,weka是一款开源软件。只要安装jdk环境就可使用(具体安装jdk可以百度)本文将论述如何不用代码,使用weka操作,通过与文档频数与单词权的特征选择方法进行文本聚类(数据为附件)第一步&#xf…

java 不识别enum_Java enum关键字不识别的快速解决办法

从别人那儿拷贝过来的myeclipse java工程,打开一看标红了一大片,仔细一看,原来是不识别enum关键字,这就有点尴尬了。我自己重新建了一个java工程,测试了下,假如我在新建工程的时候选择javase-1.6&#xff1…

【转】ABP源码分析四:Configuration

核心模块的配置 Configuration是ABP中设计比较巧妙的地方。其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配置中心化。配置中心化是一个支持模块开发的框架必备功能。 ABP中核心功能模块中的一些功能的运行时…

java 实现 堆和栈_JAVA中的堆和栈

JVM是基于堆栈的虚拟机.JVM为每个新创建的线程都分配一个堆栈.也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。差异:1.堆内存用来存放由new…