CFileDialog多文件选择的问题
Issues with CFileDialog for multiple file selection
我使用以下代码通过UI检索多个文件选择:
CFileDialog fd(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_EXPLORER,
NULL, hParentWnd ? CWnd::FromHandle(hParentWnd) : NULL);
fd.m_pOFN->Flags |= OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_NODEREFERENCELINKS;
int nLnBuff = 32767;
TCHAR* pBuffFileSelect = new TCHAR[nLnBuff];
memset(pBuffFileSelect, 0, nLnBuff * sizeof(TCHAR));
fd.m_ofn.lpstrFile = pBuffFileSelect;
fd.m_ofn.nMaxFile = nLnBuff;
if(fd.DoModal() == IDOK)
{
POSITION fileNamesPosition = fd.GetStartPosition();
while(fileNamesPosition != NULL)
{
CString strSelPath = fd.GetNextPathName(fileNamesPosition);
TRACE("path: %sn", CStringA(strSelPath));
}
}
delete[] pBuffFileSelect;
所以当我在我的PC上尝试时,我运行上面的方法,当"打开文件"对话框打开时,就像测试一样,我导航到我的桌面,使用Ctrl+ a快捷键选择所有文件,然后单击打开。结果,我开始得到以下路径:
The first path is a link, which is correct (it exists on my Public desktop):
"C:UsersPublicDesktopavp.lnk"
But then the second path is wrong. It gives me:
"C:UsersPublicDesktop1.txt"
when it's supposed to be (for the desktop that I picked):
"C:UsersUserNameDesktop1.txt"
然后每个连续的路径都是"Public"而不是"UserName"。
我应该指出,我在这台电脑上设置了几个用户帐户,我正在测试这个方法的是一个标准用户帐户。我正在运行此方法的应用程序没有运行提升(或具有常规用户权限),因此无论如何它都不应该访问其他用户帐户。
我哪里做错了?
检查了源,GetOpenFileName假设所有项实际上都在相同的文件路径中。这对于桌面来说是不正确的(有不同路径的项目合并到一个shell视图中),因此您将看到不良行为。
解决方案是使用Common Item对话框,它使用shell命名空间而不是文件系统路径。所有桌面项目都在一个共同的shell路径中,然后你可以使用IShellItem::GetDisplayName转换为文件系统路径。
不幸的是,MFC没有一个通用项目对话框的包装器,所以你必须自己管理。
相关文章:
- 对于这个问题,是否有更好的数据结构和算法选择
- 我的选择排序代码是否存在导致它跳过数组中的元素的问题?
- 给定数组范围的选择排序问题
- 字母选择排序程序的问题
- 我的选择排序功能C 有什么问题
- 间隔时间表问题有关从每个间隔选择相同时间长度的问题
- 我将如何选择进行多个数学问题,而无需每次复制和粘贴代码
- 选择排序指针问题
- 正确复制 QTableView 中的选择(模型索引问题)
- 在具有给定约束的 n 个同事中选择 m 个朋友.(编码问题)
- 选择排序C++问题
- c++,directx 12:颜色选择问题
- 选择一门语言学习真的很重要吗?他们都使用相似的技术来解决问题
- 2D等轴测引擎-数学问题-立方体选择-菱形地图
- 选择-几个问题
- 参数选择的问题
- 使用CFileDialog选择文件时出现画图问题
- CFileDialog多文件选择的问题
- 创建一个有三种方法可供选择的加密程序!它有问题,我不知道如何解决
- 从c#调用c++ DLL和访问冲突问题,我的选择是什么