的FolderBrowserDialog SelectedPath与重解析点(FolderBrows

2019-09-22 04:13发布

我在用的FolderBrowserDialog的SelectedPath财产问题时,我选择的文件夹是在远程服务器上,是一个符号链接(或任何类型的重分析点)。

如果我选择一个正常的文件夹,然后我得到的完整路径返回,例如“\服务器\文件夹\子文件夹\ thing_I_clicked_on”。

但是,如果该文件夹是重分析点,我得到的只是“\ SERVER \ thing_I_clicked_on”(所以它缺少完整路径)

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

任何人都遇到这样或有什么建议? 它似乎不被许可的关系,因为如果我知道的完整路径,我可以很愉快地浏览到它,等等。

Answer 1:

所以,我一直在调查这个相当多,并认为我有一个答案。

首先,什么我看到一些解释!

在服务器A上,存在其中包含的符号链接服务器B共享的共享:

\\serverA\Path\To\Folder

和的目标是

\\serverB\Folder

什么是实际发生的情况是,从返回的值FolderBrowserDialog.SelectedPath\\serverB\Folder ,而我误以为这是缺少路径的部分,因为字符串ServerA和serverB上非常相似! 对不起,误导大家。

我创建了自己下面这个包装MSDN示例和注意到的Shell32.dll功能SHGetPathFromIDList ,尽管该文件说,正在返回重分析点的目标

如果PIDL参数指定一个快捷方式,在pszPath将包含路径的快捷方式,而不是快捷方式的目标

我也注意到,在这之前的路径是正确的,虽然,所以在我的回调方法时的状态改变,我捕捉到的翻译所选路径

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\FolderSelectedPath属性包含\\ServerB\Folder ,这给我留下了很多的工作。



Answer 2:

如何以编程方式访问Windows象征性的目标路径链接必须是在这里。 你确定你到底需要完整的路径,而不是路径重新分析点? 我想你可以使用此路径,而不是。 “Notethat Windows不支持结对远程共享目录。” 证明



Answer 3:

安迪的回答看起来像它会工作,除了细节都丢失了,我无法揣摩出他的代码片段添加到MSDN示例代码。 我可以得到“MSDN示例”的代码的工作,只是不知道在哪里安迪的东西溜走。

所以...对于那些你喜欢我谁也弄不清是什么与上面的代码做,(我真希望我知道我在做什么;)在这里是一种跛脚的解决方法解决方案。

使用代替browseforfolder的FileDialog类和设置;

  • DereferenceLinks属性= FALSE
  • CheckFileExists = FALSE
  • 文件名=一个虚假的默认文件名。 (让用户知道,不要紧的文件名是什么,因为他们只是选择一个文件夹。)
  • 使用一个打开文件对话框,或SaveFileDialog。

请注意,如果这样做,如果一个老式的Windows快捷方式在用户点击(* .LNK)它(快捷方式)将返回作为文件名,所以你必须考虑到这一点。

希望这有助于;)(我将得到一些“口碑”工作,所以我可以在安迪的帖子,因为它看起来真的不错评论获取细节他的回答)。



文章来源: FolderBrowserDialog SelectedPath with reparse points