有没有简单的方法 检测字符串是不是DOS 8.3格式?

ziplj 2010-04-06 07:43:06
现在有两个字符串 比如
CPU~1.GAD
CPU.gadget

如何检测第一个字符串是不是DOS 8.3格式命名的呢
...全文
195 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2010-04-06
  • 打赏
  • 举报
回复
不错,受教了。
ziplj 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jennyvenus 的回复:]

查找是否有0或1个点,点的位置是否处于倒数第2,3,4位,前面后面是否有不可使用的字符比如*,?等等。
[/Quote]有一定的局限性 比如长的文件夹名被简写后 没有点

基本我的这个函数跑了一遍目录 没有出现断言失败 而且得到的结果也是对的
ziplj 2010-04-06
  • 打赏
  • 举报
回复
基本搞定了 发现属性里面有一个是否是DOS命名格式的属性。。。 哎 没看清楚协议 害的写了半天的检测函数基本作废
反正函数也没用了 贴上来吧

/**********************************************************************************
*函数名称: 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;
}


用户 昵称 2010-04-06
  • 打赏
  • 举报
回复
查找是否有0或1个点,点的位置是否处于倒数第2,3,4位,前面后面是否有不可使用的字符比如*,?等等。
hellward 2010-04-06
  • 打赏
  • 举报
回复

  8.3通常指较旧的Windows操作系统或DOS的文件命名限制
  8指文件名最大长度为8
  3指扩展名最大长度为3
你说的问题具体是什么?简单的判断文件名和后缀长度?
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧