Win32“浏览文件夹”对话框:用户创建新文件夹时返回错误的文件夹

本文关键字:文件夹 创建 返回 错误 用户 浏览 浏览文件夹 对话框 Win32 | 更新日期: 2023-09-27 18:20:00

我注意到浏览文件夹对话框中似乎有一个错误:

  1. 打开带有"新建文件夹"按钮的新样式浏览文件夹对话框。(例如,.NET Framework中的FolderBrowserDialog类,或Win32 C++中的SHBrowseForFolder)
  2. 单击"创建新文件夹"按钮创建新文件夹
  3. 键入新文件夹的名称。键入新文件夹名称后,不要按Enter键或单击任何按钮停止编辑
  4. 当光标仍在闪烁/编辑框仍处于活动状态时,单击"确定"按钮。您必须快速单击"确定"按钮
  5. 对话框不会将文件夹的新名称返回到程序,而是返回"新文件夹"目录。例如,C:'New Folder而不是用户键入的内容,例如C:'My App Data Files

我的猜测是对话框的OK按钮在按钮的"点击/鼠标向上"事件中从树视图中读取文件夹名称。如果单击速度足够快,对话框将读取旧值"New folder",因为树视图没有足够的时间处理重命名。

最终的结果是,对话框返回一个不再存在的目录的路径(因为它被重命名了),然后应用程序就会失败。

我可以在我的Windows7开发者工作站上复制它,但它并不局限于那台计算机。它已经在我们的生产C++应用程序和原型C#应用程序中复制。

有没有其他人看到过这一点并知道变通方法/修复方法?这种新型对话框自Windows2000以来就一直存在;我不敢相信到目前为止还没有看到/修复,但我找不到详细信息!我知道用户可以通过按Enter键,等待片刻,然后单击"确定"来解决这个问题。但似乎计算机经验较少的用户不知道这一点,这会让他们感到困惑。因此,我正在寻找一个程序化的变通方法/修复方法。

Win32“浏览文件夹”对话框:用户创建新文件夹时返回错误的文件夹

我建议降低你的野心,因为此时你实际上正在尝试错误修复操作系统本身。

请考虑在对话框退出后检查是否为GetFileAttributes(folderName) == INVALID_FILE_ATTRIBUTES

如果该表达式为true,则再次显示对话框。这至少可以防止崩溃或其他故障情况。

您可以检查所选文件夹是否存在(无论如何,这是一种很好的做法),如果它不存在,并且被称为"新文件夹",则获取父文件夹,找到当前用户几秒钟前创建的子文件夹,并假设这就是他们想要的文件夹。

这将可能总是有效的,但它不是万无一失的,所以它不能被认为是健壮的。

最稳健的解决方案只是检测条件并强制用户再次选择文件夹。

这是风险和不便之间的权衡。