我认识的人声称它确实存在并且我正在反编译System.IO并查看Path类,我看不到它正在进行网络调用。唯一的嫌疑人是在NormalizePath中,它调用PathHelper,调用Win32Native.GetFullPathName。我不知道那是做什么的。
他们还声称System.Uri在创建时进行网络呼叫,我觉得非常不可思议。我无法相信它会这样做,因为这将是多么令人难以置信的缓慢以及这些方法的内在性。
任何人都可以启发我吗?
修改
事实证明,Path.Combine(p)
不会调用网络,Path.GetFullName(p)
可以。在你有一个短文件名(例如"\\server\abcdef~1.txt"
)的UNC路径的情况下,它实际上会呼叫网络并尝试扩展路径,这让我大吃一惊。
答案 0 :(得分:8)
不,在给定路径分隔符的情况下,Path.Combine
方法只执行必要的字符串操作以生成合法路径字符串。它显式地不检查您是否给它一个有效的路径,或一个有效的文件名,或其他什么。
.NET 4的参考源代码是可用的,如果您很好奇,并且您可以看到工作完全在托管代码中完成,没有本机方法调用,基本上是:
return path1 + (path1.EndsWidth("\") ? "" : "\") + path2;
(当然,更加强大和灵活,但这就是主意。)
类似地,Uri类的构造函数主要进行字符串解析(虽然数量级比Path填充更复杂),但仍然没有我能看到的网络调用。
您也可以在C#app中执行此类命令时,通过运行Wireshark等数据包捕获实用程序来自行检查。