【发布时间】:2012-09-25 03:45:08
【问题描述】:
我已经与这个问题斗争了一天半,但找不到答案。我已将代码简化为用于打开保存对话框的简单代码:
CFileDialog dlg( FALSE, _T("xml"), _T("zzz.xml"),
OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR,
_T("XML Files|*.xml||"), this);
dlg.m_ofn.lpstrInitialDir = ... a string for the initial directory
dlg.DoModal();
CFileDialog 类(也直接使用 GetSaveFileName 验证)保留了所选目录的句柄,但显然仅在 Windows XP(这是我们的部署平台)下。这可以防止在应用程序仍在运行时重命名目录。
在任何人开始谈论设置当前目录的 CFileDialog 之前,我知道这一点并且我知道 OFN_NOCHANGEDIR。这不是那个问题。
在循环中运行此代码会导致保留越来越多的句柄,这可以使用 Process Explorer 进行验证,以查看应用程序是否具有指向该目录的句柄。重复运行对话框会导致额外的句柄,但并非总是如此。如果我每次都更改名称,那么似乎每次都会添加一个新名称,尽管并非 100% 始终如一。
每次我认为我有一些可以解决它的问题时,它都不会成功。像文件对话框这样基本的东西怎么会被破坏?
我不知道还能做什么。这是在我们即将发布新版本之前发现的问题。
【问题讨论】:
-
你怎么知道它保留了一个把手?
-
抱歉,在我进入完整故事之前标记它不小心发布了