VC多选文件夹和文件控件出现的问题

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

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时发现的问题。根据提供的方法先遍历文件再遍历文件夹即可

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值