VC多选文件夹和文件控件出现的问题
在使用选择文件和文件夹控件的时候解决了一些遇到的问题,针对控件CSelectDialog
本文使用的如下参考控件:CSelectDialog
参考:http://blog.youkuaiyun.com/sulliy/article/details/6658540
1. 在文件夹包含desktop.ini文件,选择路径出错的问题
关于desktop.ini文件的作用,自行百度。
由于此文件夹包含desktop.ini文件,即使修改名称也会指向名称“Program Files”,在此文件夹内部的文件右键属性中的路径就可以看到真实路径,需要注意的是:选择此文件夹上传名称仍为真实名称(如:“Program Files”),而不是显示的名称
使用CDM_GETFILEPATH方法获取真实的路径:
使用方法参考:https://baike.baidu.com/item/GetPathName/8492964?fr=aladdin
CString fileName = _T("Program Fileslalala2");// desktop.ini中LocalizedResourceName表示的文件名称
CString filePath = _T("C:\\test\\");//文件的路径
fileName = filePath + fileName;// 此时路径为显示的路径:C:\test\Program Fileslalala2
if (!fileName.IsEmpty())
{
// 获取真实路径,防止有desktop.ini文件导致获取到的只是显示路径
if (openDlg->SendMessage(CDM_GETFILEPATH, (WPARAM)MAX_PATH,
(LPARAM)fileName.GetBuffer(MAX_PATH)) >= 0)
{
fileName.ReleaseBuffer();
}
}
DWORD attr = GetFileAttributes(fileName);// 此时路径已经变为真正的路径:C:\test\Program Files
if((attr != 0xFFFFFFFF) && (attr & FILE_ATTRIBUTE_DIRECTORY))
mList.Add(fileName);
注:此方法只对选择一个的文件夹有效,如果是多选文件夹,则CMD_GETFILEPATH获取到的内容一样,是无效的
2. 如果系统设置为不显示扩展名的时候,有相同名称的文件和文件夹会默认优先选择文件夹
这也是在使用CSelectDialog时发现的问题。根据提供的方法先遍历文件再遍历文件夹即可

本文解决使用CSelectDialog控件时遇到的问题,包括处理包含desktop.ini文件的路径错误及系统不显示扩展名时文件夹与文件同名的选择问题。
3183

被折叠的 条评论
为什么被折叠?



