Delphi SelectDirectory与网络驱动器的奇怪行为

时间:2012-11-15 05:59:51

标签: windows delphi

我收到了客户的错误报告。我的程序使用Delphi选择目录功能,允许他选择程序使用的几个目录,允许在网络驱动器上。以下是错误报告的相关摘录:

  

尝试更改目录时,对话框中未显示网络驱动器。在浏览菜单中打开“计算机”时,仅显示本地驱动器。环形交叉口解决方案是打开对话框,断开网络驱动器,然后重新连接网络驱动器。然后它出现在对话框中。更改下一个文件夹位置时,必须重新完成。我发现主要技术人员经常这样做,因为它似乎重置了。

起初我认为这必须是Windows没有拿起目录,所以我让他检查两台计算机上的网络位置(客户端和带网络驱动器的网络位置)是否设置为Work,以检查驱动器已映射到客户端,以检查网络发现是否已打开,并检查他是否可以在资源管理器中看到驱动器正常。他做到了,但这个bug仍然存在。

我没有在谷歌或QC报告中发现任何相关信息,SelectDirExtOpts的documentation似乎表明网络驱动器应该“正常工作”。

所以我的问题是:有没有人遇到过类似的东西?它可能是Windows问题,还是Delphi?

非常感谢。

2 个答案:

答案 0 :(得分:4)

只要您包含sdShowShares标志,它确实应该正常工作。

如果您查看SelectDirectory函数的来源,您会看到它只是为SHBrowseForFolder设置并阅读结果。

SHBrowseForFolder是Windows Shell API函数:

function SHBrowseForFolder; external shell32 name 'SHBrowseForFolderW';

Delphi必须正确解释从SHBrowseForFolder返回的结果,因为重新连接后驱动器会正确显示。所以我说这是客户端机器上的Windows问题。

答案 1 :(得分:0)

Delphi SelectDirectorySHBrowseForFolder的包装,但是-应该注意,SelectDirectory函数未显示XE2上的Delphi / C ++ Builder版本的映射网络驱动器看起来更老。在较新的版本上,它似乎可以正常工作并显示共享的网络驱动器。

以下代码应可在所有更新版本的Delphi中使用:

AOptions := [sdNewUI, sdShowShares];
Result := SelectDirectory(Caption, Root, Directory, AOptions, nil);

较早的Delphi / C ++ Builder版本的用户可能希望直接调用SHBrowseForFolderW。可以在以下位置找到一些示例代码:https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shbrowseforfolderw