`
webcode
  • 浏览: 6076937 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Path.Combine 的使用

 
阅读更多

System.IO.

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"

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 操作系统上为斜杠(“/”)。

简单来说,就是合并两个路径字符串。
比如如下调用,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"

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 操作系统上为斜杠(“/”)。

分享到:
评论

相关推荐

    基于为何我不喜欢用Path.Combine的详解

    Path.Combine是.NET框架中用于合并两个或多个路径片段的静态方法,它可以帮助开发者更安全地构建路径字符串,避免手动处理路径分隔符可能导致的问题。然而,这个方法并不总是适用于所有情况,有时可能会导致意外的...

    C#的path.GetFullPath 获取上级目录实现方法

    获取当前目录可以使用 代码如下:appdomain.currentdomain.basedirectory 获取当前目录的上级目录 代码如下:path.getfullpath(“..”) 具体代码如下: 代码如下:using system; using system.collections.generic; ...

    C#Path类使用 源代码

    `Path.Combine(string path1, string path2)`:这是`Path`类中一个常用的方法,它允许你将两个或多个路径段合并成一个完整路径。例如,如果你有`"Documents"`和`"MyFile.txt"`,可以使用此方法得到`"Documents\...

    asp.net实现在线查看(预览)pdf,ppt,word,excel文件.rar

    string sourceDoc = Path.Combine(fileDire, fileName); string saveDoc = ""; string docExtendName = System.IO.Path.GetExtension(sourceDoc).ToLower(); bool result = false; if (docExtendName == "....

    python os.path.isfile()因参数问题判断错误的解决

    目的: 找出路径坐在的所有python文件(.py结尾),返回列表。 代码: def list_py(path = None): if path == None: ...['cmdtest.py', 'datatest.py', 'excel_combine.py', 'input.py', 'iotest

    C#文件读写路径总结

    4. 合并两个路径:使用 Path.Combine 方法,它会帮你处理烦人的“\”字符。 5. 获得系统目录的路径(如桌面,我的文档,临时文件夹等):使用 System.Environment 类的相关属性和方法,例如 Environment....

    C#项目实战,项目资源

    8. **创建文件路径**:在实际项目中,我们经常需要创建新的文件路径,`Path.Combine()`和`Path.Combine(string[], string[])`方法可以帮助我们安全地构建这样的路径,避免路径分隔符的错误。 9. **路径安全**:开发...

    Path类与Directory类与File类对路径/目录/文件的操作实例

    此外,Path.GetDirectoryName()、Path.GetExtension()、Path.GetFileName()、Path.GetFileNameWithoutExtension()和Path.GetFullPath()等方法分别用于获取路径的不同部分,比如目录名、文件扩展名、文件名等。...

    C#获取U盘盘符,序列号,并在后台格式化U盘

    string directoryPath = Path.Combine(drive.RootDirectory.FullName, "新目录"); Directory.CreateDirectory(directoryPath); Console.WriteLine("已创建目录: {0}", directoryPath); ``` 结合以上代码,你可以...

    yolov7-tiny.conv.87.zip

    `yolov7-tiny.cfg`是模型配置文件,`yolov7-tiny.conv.87`是权重文件,`-i 0`表示使用GPU的0号设备,`-thresh 0.5`和`-iou_thresh 0.45`分别是置信度阈值和非极大值抑制的IoU阈值,`<input_image_path>`是待检测的...

    批量修改文件名

    fileInfo.MoveTo(Path.Combine(sourceDirectory, newName)); } ``` 对于“日期序列重命名”,可以利用`FileInfo.CreationTime`属性,将日期转换成字符串格式并作为新文件名的一部分: ```csharp DateTime ...

    09:Path.pdf

    ChangeExtension 更改路径字符串的扩展名。 Combine(String()) 将字符串数组组合成一个路径。 Combine(String, String)... GetFullPath 返回指定路径字符串的绝对路径。 GetInvalidFileNameChars 获取包含不允许在文

    C# 压缩解压缩

    var entryName = Path.Combine(baseFolder, Path.GetFileName(file)); var entry = archive.CreateEntry(entryName); using (var entryStream = entry.Open()) using (var fileStream = File.OpenRead(file)) ...

    c#插件模式 ——例子(利用反射机制)

    Assembly assembly = Assembly.LoadFile(Path.Combine(pluginpath, "TestComWin.dll")); // Type type = assembly.GetType(item.SubItems[1].Text.Trim()); IPlugin instance = (IPlugin)assembly.CreateInstance...

    C# 批量修改文件名

    File.Move(filePath, Path.Combine(Path.GetDirectoryName(filePath), newName)); ``` 5. **处理异常**:在重命名过程中可能会出现文件正在被使用或其他错误,因此应捕获并处理可能出现的异常。 ```csharp try { ...

    soap json 等系列化方式

    string fileName = Path.Combine(Serializepath, "BanirySerialize.txt"); //序列化 using (Stream binStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { //需要一个stream ...

    VB利用Socket和http和inet进行上传文件

    asp.net using System;... file.SaveAs(Path.Combine(AppDomain.CurrentDomain.BaseDirectory+@"ChatTemp\" , file.FileName)); } } public bool IsReusable { get { return true; } } }

    C# 图片上传非常好用

    可以使用`DateTime`类获取当前时间,然后使用`Path.Combine`构建文件路径: ```csharp var uploadDate = DateTime.Now; var yearFolder = uploadDate.Year.ToString(); var monthFolder = uploadDate.Month....

Global site tag (gtag.js) - Google Analytics