当我选择的文件夹位于远程服务器上并且是符号链接(symbolic link)(或任何种类的重新解析点)时,FolderBrowserDialog的SelectedPath属性出现问题。

如果选择普通文件夹,则返回完整路径,例如“\SERVER\folder\subfolder\thing_I_clicked_on”。

但是,如果该文件夹是一个重新解析点,我只会得到“\SERVER\thing_I_clicked_on”(因此缺少完整路径)

var dialog = new FolderBrowserDialog();
dialog.ShowDialog();
MessageBox.Show(dialog.SelectedPath);

有人遇到这个问题或有什么建议吗?它似乎与权限无关,好像我知道我可以很高兴地浏览到的完整路径,等等。

最佳答案

因此,我一直在对此进行大量调查,并认为我有答案。

首先,对我所看到的内容进行一些解释!

在服务器A上,有一个共享,其中包含一个指向服务器B上共享的符号链接(symbolic link):

\\serverA\Path\To\Folder

而目标是
\\serverB\Folder

实际发生的是,从FolderBrowserDialog.SelectedPath返回的值是\\serverB\Folder,我错误地认为它缺少路径的一部分,因为字符串serverA和serverB非常相似!抱歉误导大家。

我在此MSDN Example之后创建了自己的包装器,并注意到Shell32.dll函数SHGetPathFromIDList返回了重新解析点的目标,尽管该文档说



我确实注意到之前的路径是正确的,所以在状态更改的回调方法中,我捕获了未翻译的所选路径
private int FolderBrowserCallback(IntPtr hwnd, int msg, IntPtr lParam, IntPtr lpData)
        {
            switch (msg)
            {
                 case BrowseForFolderMessages.BffmSelchanged:
                     if (haveValidPath && !String.IsNullOrEmpty(displayedPath))
                                {
                                    if (IntPtr.Zero != _hwndEdit)
                                    {
                                        SelectedFullPath = displayedPath;
                                    }
        }

因此,SelectedFullPath属性包含\\serverA\Path\To\Folder,而SelectedPath属性包含\\ServerB\Folder,这使我有很多工作要做。

10-06 14:54