我注意到浏览文件夹对话框中的错误似乎是什么:
C:\New Folder
而不是用户输入的内容,例如C:\My App Data Files
。我的猜测是对话框的OK按钮从按钮的“click / mouse-up”事件中的树视图中读取文件夹名称。如果您足够快地单击它,对话框将读取旧值“新文件夹”,因为树视图没有足够的时间来处理重命名。
最终结果是对话框返回不再存在的目录的路径(因为它已被重命名),然后应用程序失败。
我可以在我的Windows 7开发人员工作站上重现这一点,但它并不仅限于那台计算机。它已在我们的生产C ++应用程序和原型C#应用程序中重现。
还有其他人看过这个并知道解决方法/修复方法吗?自Windows 2000以来,这种新式对话已经存在;我不敢相信现在还没有看到/修复,但我找不到细节!我知道用户可以通过例如解决方法解决这个问题。按Enter键,等待片刻,然后单击“确定”。但似乎具有较少计算机经验的用户不知道这一点,并且它会绊倒它们。所以我正在寻找程序化的解决方法/修复。
答案 0 :(得分:3)
我建议您将目标设定得很低,因为此时您正在努力修复操作系统本身。
在对话框退出后,请考虑检查GetFileAttributes(folderName) == INVALID_FILE_ATTRIBUTES
是否正确。
如果该表达式为true,则再次显示该对话框。这至少可以防止崩溃或其他故障情况。
答案 1 :(得分:2)
您可以检查是否存在所选文件夹(无论如何都是一个好习惯),如果它不存在并被称为“新建文件夹”,请获取父文件夹,找到几秒钟前创建的子文件夹由当前用户,并假设他们想要的那个。
那可能总是有效,但它不是万无一失的,所以它不能被认为是健全的。
最强大的解决方案就是检测条件并强制用户再次选择文件夹。
这是风险和不便之间的权衡。