鉴于代码:
string p = @"C:\Users\Brian";
string p2 = @"\bin\Debug";
string result = Path.Combine(p, p2);//result: \bin\Debug
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
我希望看到以下结果:
C:\Users\Brian\bin\Debug
Run Code Online (Sandbox Code Playgroud)
但结果是
\bin\Debug
Run Code Online (Sandbox Code Playgroud)
如果我初始化 p2 = @"bin\Debug";
然后结果如预期.看看MSDN,这似乎按设计工作:
如果path2不包含根(例如,如果path2不以分隔符或驱动器规范开头),则结果是两个路径的串联,以及插入的分隔符.如果path2包含根,则返回path2.
IMO,在.NET中排除\作为根更有意义.AFAIK,这不是任何Windows操作系统上的有效根(\\可以).然后,我可以组合部分路径,而不用担心部分路径是否以a开头\.
为什么这种方法设计为考虑单个\根?
为什么这个方法设计为考虑单个\根?
因为就其他操作而言它是一个根.例如,在命令提示符下:
c:\Users\Jon\Test>dir \
Volume in drive C is Windows8_OS
Volume Serial Number is C058-6ADE
Directory of c:\
Run Code Online (Sandbox Code Playgroud)
或者从.NET中的其他文件操作:
using System;
using System.IO;
class Test
{
static void Main()
{
var lines = File.ReadAllLines(@"\Users\Jon\Test\Test.cs");
Console.WriteLine(lines.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
11
Run Code Online (Sandbox Code Playgroud)
或者来自Java:
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
String path = "\\Users\\Jon\\Test\\Test.java";
// Just to prove that the double backslashes are language escapes...
System.out.println(path);
// Obviously we'd normally clean stuff up...
InputStream stream = new FileInputStream(path);
BufferedReader reader = new BufferedReader
(new InputStreamReader(stream, "utf-8"));
System.out.println(reader.readLine());
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
\Users\Jon\Test\Test.java
import java.io.*;
Run Code Online (Sandbox Code Playgroud)
我敢说本机代码也是如此.
所以,凡不窗口允许你启动一个路径以"\"到当前驱动器内根除呢?
为什么这个方法设计为考虑单个\根?
我认为更大的问题是为什么你开始想要成为一个相对的道路\.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |