gpt4 book ai didi

c# - 目录存在与路径组合与字符串连接

转载 作者:太空狗 更新时间:2023-10-29 21:13:23 25 4
gpt4 key购买 nike

因此,当我构建一个文件夹/文件检查条件时,一位同事说使用 Path.Combine “更好”:

string finalPath = Path.Combine(folder, "file.txt"); 

与我以前的做法相反

string finalPath = folder +  "\\file.txt";

任何合理的推理,这是“更好的?”

最佳答案

这是个有趣的问题;

当然,你可以这样写:

string finalPath = String.Format("{0}\\file.txt", folder); 

达到你想要的结果。

使用 ILSpy , 不过,让我们看看为什么 Path.Combine更好。

你调用的重载是:

public static string Combine(string path1, string path2)
{
if (path1 == null || path2 == null)
{
throw new ArgumentNullException((path1 == null) ? "path1" : "path2");
}
Path.CheckInvalidPathChars(path1, false);
Path.CheckInvalidPathChars(path2, false);
return Path.CombineNoChecks(path1, path2);
}

优势明显;首先,该函数检查空值并抛出适当的异常。然后它检查任一参数中的非法字符,并抛出适当的异常。一旦满足,它就会调用 Path.CombineNoChecks:

private static string CombineNoChecks(string path1, string path2)
{
if (path2.Length == 0)
{
return path1;
}
if (path1.Length == 0)
{
return path2;
}
if (Path.IsPathRooted(path2))
{
return path2;
}
char c = path1[path1.Length - 1];
if (c != Path.DirectorySeparatorChar && c != Path.AltDirectorySeparatorChar && c != Path.VolumeSeparatorChar)
{
return path1 + Path.DirectorySeparatorChar + path2;
}
return path1 + path2;
}

这里最有趣的是它支持的字符;

Path.DirectorySeparatorChar = "\\"
Path.AltDirectorySeparatorChar = "/"
Path.VolumeSeparatorChar = ":"

因此它也将支持分隔符错误的路径(就像从 urn file://C:/blah 一样)

简而言之,它更好,因为它为您提供验证、一定程度的可移植性(上面显示的 3 个常量可以在每个框架操作系统的基础上定义),并且支持您经常遇到的不止一种类型的路径.

关于c# - 目录存在与路径组合与字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com