检查文件名&路径是否合法的函数

文件路径合法性检查
{===================================================
功    能 : 检查文件路径和文件名是否合法
 
参    数 : Filename : string //文件名
 
返 回 值 :  True : 合法   |   False : 不合法
 
备    注 :  仅检查是否合法,不检测文件是否存在
 
作    者 :  yueue (antong)    2004.8.22
            QQ: 20613165  Email: yueue{A}qq.com
=====================================================}
 
 
 
 
   //检查文件名&路径是否合法的函数
function checkFilename(strFilename:string):boolean;
 
  function c(s:string):boolean; //子函数:连带检测
  var
   i:integer;
   s1:string;
   f,g,h:boolean;
  begin
    f:=false;
    g:=false;
    h:=false;
    result:=true;
    for i:=0 to length(s)-1 do
    begin
      s1:=copy(s,i,1);
        //////检测\的连带
        if s1='\' then
        begin
            if f then
            begin
               result:=false;
               exit;
            end
            else
            begin
            f:=true;
            result:=true;
            end;
 
      end
      else
      begin
         f:=false;
         result:=true;
      end;
       //////检测:的连带
 
        if s1=':' then
        begin
            if g then
            begin
               result:=false;
               exit;
            end
            else
            begin
            g:=true;
            result:=true;
            end;
 
      end
      else
      begin
         g:=false;
         result:=true;
      end;
      //////检测.的连带
       
        if s1='.' then
        begin
            if h then
            begin
               result:=false;
               exit;
            end
            else
            begin
            h:=true;
            result:=true;
            end;
 
      end
      else
      begin
         h:=false;
         result:=true;
      end;
      ////
 
     end;
 
  end;
begin
  if (extractfilename(strFilename)=strFilename)////是否只输入了文件名而没有输路径
  or (extractfilename(strFilename)='')//是否只输入了路径没有输文件名
  or (extractfileext(extractfilename(strFilename))='')//是否格式错误(比如乱输)
  or (extractfileext(extractfilename(strFilename))='.')//是否没有后缀
  or (extractfileext(extractfilename(strFilename))=extractfilename(strFilename))
      //是否只输入了文件名而没有输路径
  or (length(extractfileext(extractfilename(strFilename)))>5)//后缀是否超了5个字节
  or (length(extractfilename(strFilename))>225)//文件名是否超过255个字节
  or (pos('\',strfilename)=0)//判断是否有'\'
  or (pos('.',strfilename)=0)//判断是否有'.'
  or (pos(':',strfilename)=0)//判断是否有':'
  or (pos('\',extractfilename(strfilename))<>0)//判断文件名是否有非法字符
  or (pos('/',extractfilename(strfilename))<>0)
  or (pos(':',extractfilename(strfilename))<>0)
  or (pos('*',extractfilename(strfilename))<>0)
  or (pos('?',extractfilename(strfilename))<>0)
  or (pos('"',extractfilename(strfilename))<>0)
  or (pos('<',extractfilename(strfilename))<>0)
  or (pos('>',extractfilename(strfilename))<>0)
  or (pos('|',extractfilename(strfilename))<>0)
  or (strfilename='')//是否没有输入任何东西
  or (not c(strfilename))//用检测连带函数检测是否出现\.:的连带
  then
  result:=false else result:=true; //输出
end;
&lt;think&gt;好的,我现在需要回答用户关于如何在Matlab中检查路径文件名有效性的问题。首先,我得回想一下Matlab中相关的函数和方法。记得有几个函数可以用来处理路径文件名的验证,比如exist、isfolder、isletter等。 用户可能想知道如何确保他们创建的文件夹或者文件名合法的,避免系统不允许的字符。比如,在Windows和Linux中,文件名不能包含某些特殊字符,如斜杠、问号、星号等。此外,路径是否存在也是一个常见的问题,特别是在读写文件之前,需要确认路径是否存在,否则可能导致错误。 首先,我应该分步骤说明检查路径文件名有效性的不同方法。对于路径存在性的检查,可以使用exist函数判断路径是否存在,或者使用isfolder来专门检查是否为文件夹。另外,用户可能需要创建路径,这时候可以用mkdir,并结合exist来确认是否创建成功。 然后是文件名的有效性检查。这里需要验证文件名是否符合操作系统的规则,比如不能包含非法字符,长度限制等。Matlab的isvarname函数可能可以用来检查部分有效性,但可能不完全,因为文件名允许的字符比变量名更多。所以可能需要自定义检查,比如使用正则表达式来排除非法字符。 还要考虑不同操作系统的差异,比如Windows和Linux对文件名的大小写敏感性和非法字符的不同。可能需要分别处理,或者使用更通用的方法。 接下来,我应该提供具体的代码示例,比如如何检查路径是否存在,如何创建路径,如何验证文件名合法性。同时,需要指出可能遇到的错误和如何处理,比如在写入文件前确保路径存在,避免运行时错误。 还需要注意用户可能遇到的常见问题,比如路径字符串中的斜杠方向,是否使用正斜杠或反斜杠,Matlab中通常用正斜杠或者双反斜杠来处理。 最后,总结一下步骤,并给出相关问题的建议,比如如何处理非法字符,如何批量检查多个文件名等。同时,结合之前的引用内容,虽然用户提供的引用是关于路径规划的,但可能需要忽略,因为与当前问题无关,但按照系统指令需要参考用户之前的提问,可能需要查找是否有相关的历史问题需要关联,但在这个情况下,可能没有直接关联,所以可以忽略。 现在需要组织这些思路,用清晰的中文回答,分步骤说明,并给出代码示例。同时,生成相关问题供用户参考。&lt;/think&gt;在Matlab中检查路径文件名的有效性可以通过以下方法实现: --- ### 一、路径有效性检查 #### 1. **判断路径是否存在** - 使用`exist`函数检查路径是否存在: ```matlab path = &#39;C:\MyFolder\SubFolder&#39;; if exist(path, &#39;dir&#39;) == 7 disp(&#39;路径存在&#39;); else disp(&#39;路径不存在&#39;); end ``` - 或使用`isfolder`函数(Matlab R2017b及以上): ```matlab if isfolder(path) disp(&#39;路径有效&#39;); end ``` #### 2. **自动创建缺失路径** ```matlab if ~isfolder(path) mkdir(path); % 创建单层目录 mkdir(&#39;parent/child/grandchild&#39;); % 创建多级目录(需逐级检查) end ``` --- ### 二、文件名有效性检查 #### 1. **检查非法字符** ```matlab filename = &#39;data?2023.txt&#39;; illegalChars = &#39;[&lt;&gt;:&quot;/\\|?*]&#39;; % 定义非法字符正则表达式 if isempty(regexp(filename, illegalChars, &#39;once&#39;)) disp(&#39;文件名合法&#39;); else disp(&#39;文件名包含非法字符&#39;); end ``` #### 2. **验证长度限制** - Windows系统文件名长度需 &le; 255字符,路径总长度 &le; 260字符: ```matlab if length(filename) &gt; 255 error(&#39;文件名超过系统限制&#39;); end ``` #### 3. **保留名称检查** ```matlab reservedNames = {&#39;CON&#39;, &#39;PRN&#39;, &#39;AUX&#39;, &#39;NUL&#39;, &#39;COM1&#39;, &#39;LPT1&#39;}; [~, name, ~] = fileparts(filename); if any(strcmpi(name, reservedNames)) error(&#39;文件名是系统保留名称&#39;); end ``` --- ### 三、综合验证函数示例 ```matlab function isValid = validatePathAndName(path, filename) % 检查路径 if ~isfolder(path) mkdir(path); % 尝试创建路径 if ~isfolder(path) isValid = false; return; end end % 检查文件名 illegalChars = &#39;[&lt;&gt;:&quot;/\\|?*]&#39;; if regexp(filename, illegalChars) isValid = false; elseif length(filename) &gt; 255 isValid = false; else isValid = true; end end ``` --- ### 四、注意事项 1. **跨平台兼容性**:Windows和Linux对文件名大小写敏感性和非法字符的定义不同,需针对性处理[^1]。 2. **路径分隔符**:建议使用`fullfile`函数生成路径: ```matlab path = fullfile(&#39;root&#39;, &#39;subfolder&#39;, &#39;file.txt&#39;); % 自动适配系统分隔符 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值