Path.Combine是否曾在.net中进行网络呼叫?

时间:2012-02-14 22:37:57

标签: c# .net networking uri filepath

我认识的人声称它确实存在并且我正在反编译System.IO并查看Path类,我看不到它正在进行网络调用。唯一的嫌疑人是在NormalizePath中,它调用PathHelper,调用Win32Native.GetFullPathName。我不知道那是做什么的。

他们还声称System.Uri在创建时进行网络呼叫,我觉得非常不可思议。我无法相信它会这样做,因为这将是多么令人难以置信的缓慢以及这些方法的内在性。

任何人都可以启发我吗?

修改 事实证明,Path.Combine(p)不会调用网络,Path.GetFullName(p)可以。在你有一个短文件名(例如"\\server\abcdef~1.txt")的UNC路径的情况下,它实际上会呼叫网络并尝试扩展路径,这让我大吃一惊。

1 个答案:

答案 0 :(得分:8)

不,在给定路径分隔符的情况下,Path.Combine方法只执行必要的字符串操作以生成合法路径字符串。它显式地检查您是否给它一个有效的路径,或一个有效的文件名,或其他什么。

.NET 4的参考源代码是可用的,如果您很好奇,并且您可以看到工作完全在托管代码中完成,没有本机方法调用,基本上是:

return path1 + (path1.EndsWidth("\") ? "" : "\") + path2;

(当然,更加强大和灵活,但这就是主意。)

类似地,Uri类的构造函数主要进行字符串解析(虽然数量级比Path填充更复杂),但仍然没有我能看到的网络调用。

您也可以在C#app中执行此类命令时,通过运行Wireshark等数据包捕获实用程序来自行检查。