我收到了客户的错误报告。我的程序使用Delphi选择目录功能,允许他选择程序使用的几个目录,允许在网络驱动器上。以下是错误报告的相关摘录:
尝试更改目录时,对话框中未显示网络驱动器。在浏览菜单中打开“计算机”时,仅显示本地驱动器。环形交叉口解决方案是打开对话框,断开网络驱动器,然后重新连接网络驱动器。然后它出现在对话框中。更改下一个文件夹位置时,必须重新完成。我发现主要技术人员经常这样做,因为它似乎重置了。
起初我认为这必须是Windows没有拿起目录,所以我让他检查两台计算机上的网络位置(客户端和带网络驱动器的网络位置)是否设置为Work,以检查驱动器已映射到客户端,以检查网络发现是否已打开,并检查他是否可以在资源管理器中看到驱动器正常。他做到了,但这个bug仍然存在。
我没有在谷歌或QC报告中发现任何相关信息,SelectDirExtOpts的documentation似乎表明网络驱动器应该“正常工作”。
所以我的问题是:有没有人遇到过类似的东西?它可能是Windows问题,还是Delphi?
非常感谢。
答案 0 :(得分:4)
只要您包含sdShowShares
标志,它确实应该正常工作。
如果您查看SelectDirectory
函数的来源,您会看到它只是为SHBrowseForFolder
设置并阅读结果。
SHBrowseForFolder
是Windows Shell API函数:
function SHBrowseForFolder; external shell32 name 'SHBrowseForFolderW';
Delphi必须正确解释从SHBrowseForFolder
返回的结果,因为重新连接后驱动器会正确显示。所以我说这是客户端机器上的Windows问题。
答案 1 :(得分:0)
Delphi SelectDirectory
是SHBrowseForFolder
的包装,但是-应该注意,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