在.net中进行Path.Combine曾经进行过网络呼叫

本文关键字:网络 呼叫 曾经 Path net Combine | 更新日期: 2023-09-27 18:24:41

我认识的人声称它确实如此,我正在反编译System.IO并查看Path类,但我看不到它在进行网络调用。唯一可疑的是在NormalizePath中,它调用PathHelper,后者调用了Win32Native.GetFullPathName。我不知道这是怎么回事。

他们还声称System.Uri在创建时会进行网络调用,我觉得这非常不可思议。我简直不敢相信它会做到这一点,因为这将是多么缓慢,而且这些方法是多么内在。

有人能启发我吗?

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

在.net中进行Path.Combine曾经进行过网络呼叫

否,Path.Combine方法只需执行所需的字符串操作,即可在给定路径分隔符的情况下生成合法的路径字符串。它显式地执行而不是检查,以查看您是否为它提供了有效的路径或有效的文件名,或其他什么。

如果你好奇的话,.NET4的参考源代码是可用的,你可以看到这项工作完全是在托管代码中完成的,没有本地方法调用,基本上是:

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

(当然,要强大和灵活得多,但这就是想法。)

类似地,Uri类的构造函数主要进行字符串解析(尽管比Path的东西复杂几个数量级),但我仍然看不到任何网络调用。

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