目录存在路径组合vs字符串连接
本文关键字:vs 字符串 连接 组合 路径 存在 | 更新日期: 2023-09-27 18:18:32
所以当我正在构建一个Folder/File检查条件时,一个同事说使用Path"更好"。结合:
string finalPath = Path.Combine(folder, "file.txt");
而不是
string finalPath = folder + "''file.txt";
这是"更好"的合理推理吗?"
这是个有趣的问题;
当然,你可以这样写:string finalPath = String.Format("{0}''file.txt", folder);
达到你想要的结果。
使用ILSpy,让我们看看为什么路径。联合使用效果更好。
你正在调用的重载是:
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个常量可以在每个框架操作系统的基础上定义),并且支持您经常遇到的多种类型的路径。
尝试这两个方法来查看差异....它可以处理URI和标准路径。所以一定要用Path.Combine
Console.WriteLine(Path.Combine(@"file:///c:/temp/", "x.xml"));
输出file:///c:/temp/x.xml
Console.WriteLine(Path.Combine(@"C:'test", "x.xml"));
输出C:'test'x.xml
是的,在文件路径分隔符与'
首先你可以用@"'file.txt
代替"''file.txt";
第二,让。net关心修复路径。我们拥有它是有原因的。你可以100%确定你做的是正确的,但是如果你开始在代码的每个地方手工组合路径,总是有可能产生bug。
一个简单的例子。
- 用户输入一个路径,你想在那里创建一个名为
temp
的子文件夹。你会怎么做?
如果末尾没有反斜杠,则添加一个,否则执行此操作,否则执行另一个…等。使用Path.Combine()
,您不必进行检查。
加上其他注释,它可以组合您想要创建的目录的许多部分。
例如:
Path.Combine(root, nextFolder, childfolder, file);
当它接收字符串数组时,它支持多个字符,因此它能够在单个执行的行中创建正确的目录。
认为,