16,548
社区成员




/**********************************************************************************
*函数名称: IsDOSShortName
*功能说明: 判断第二个字符串是不是简化过的字符串
*参数列表: pWchar : 第一个字符串的指针
* pWcharIsShortName : 需要判断的是不是DOS 8.3格式字符串的指针
*返 回 值: TRUE : pWcharIsShortName 是DOS文件名
* FALSE : pWcharIsShortName 不是DOS文件名
**********************************************************************************/
BOOL CMFTRecord::IsDOSShortName(WCHAR* pWchar , WCHAR* pWcharIsShortName)
{
if (wcslen(pWchar) > 12) //如果第一个文件名属性的字符串长度大于12 则肯定第二个字符串长度是8.3简化名
return TRUE;
if (wcslen(pWcharIsShortName) > 12) //如果第二个文件名属性的字符串长度大于12 则肯定第一个字符串长度是8.3简化名
return FALSE;
if (wcsstr(pWchar , L" ") != NULL) //第一个文件名属性中找到了空格 则第二个字符串肯定为8.3简化名
return TRUE;
if (wcsstr(pWcharIsShortName , L" ") != NULL) //第二个文件名属性中找到了空格 则第一个字符串肯定为8.3简化名
return FALSE;
if (GetFileNameLen(pWchar) > 8)
return TRUE;
if (GetFileExtLen(pWchar) > 4)
return TRUE;
if (GetFileNameLen(pWcharIsShortName) > 8)
return FALSE;
if (GetFileExtLen(pWcharIsShortName) > 4)
return FALSE;
//ASSERT(FALSE);
//OK 强制转换成ANSI字符串 查看第七位是不是 '~'
char szWChar[_MAX_PATH];
char szWcharIsShortName[_MAX_PATH];
memset(szWChar , 0 , _MAX_PATH);
memset(szWcharIsShortName , 0 , _MAX_PATH);
WideCharToMultiByte(CP_OEMCP , NULL , pWchar , -1 , szWChar , _MAX_PATH ,
NULL , FALSE);
WideCharToMultiByte(CP_OEMCP , NULL , pWcharIsShortName , -1 , szWcharIsShortName , _MAX_PATH ,
NULL , FALSE);
if (szWChar[6] == '~')
return FALSE;
if (szWcharIsShortName[6] == '~')
return TRUE;
//下个断言 看看有没有没有考虑到的情况
ASSERT(FALSE);
return FALSE;
}
//获取文件名长度
int CMFTRecord::GetFileNameLen(WCHAR* pWchar)
{
WCHAR wChar = '.';
WCHAR* pSubStr = wcsrchr(pWchar , wChar);
if (pSubStr != NULL)
return (int)pSubStr - (int)pWchar;
return 0;
}
//获取扩展名长度
int CMFTRecord::GetFileExtLen(WCHAR* pWchar)
{
WCHAR wChar = '.';
WCHAR* pSubStr = wcsrchr(pWchar , wChar);
if (pSubStr != NULL)
return wcslen(pSubStr) - 1;
return 0;
}