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

{===================================================
功    能 : 检查文件路径和文件名是否合法
 
参    数 : 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;嗯,用户的问题是关于NX二次开发中选择文件路径文件名函数。首先,我需要确定NX二次开发通常使用的编程语言。我记得NX主要支持C/C++和.NET,可能还有Java和Python,但C++和.NET更常见。用户提到的是&ldquo;函数&rdquo;,所以可能需要具体的API名称。 接下来,用户需要的是让用户选择文件路径文件名,这通常涉及到打开或保存文件的对话框。在Windows环境中,常用的方法是使用系统提供的对话框,比如GetOpenFileName或SaveFileName,这些属于Win32 API的一部分。但是NX是否封装了这些功能呢? 回忆一下NX Open API,可能有一些特定的函数。比如在C/C++中,UF_UI_open_file_dialog或者类似的函数。对于.NET,可能使用OpenFileDialog或SaveFileDialog类,这些是.NET Framework的一部分,可能在NX的二次开发中可以直接使用。 然后,需要验证这些函数是否正确。例如,在C语言中,UF_UI_select_file函数可能用于选择文件,参数包括对话框标题、默认路径、过滤器等。而在.NET中,使用System.Windows.Forms.OpenFileDialog需要确保NX环境支持Windows Forms,或者是否有NX自带的封装方法。 另外,用户可能希望知道如何在不同的编程语言中实现,比如C++和.NET的例子都需要提供。同时,可能需要考虑跨平台的情况,但NX主要在Windows运行,所以主要针对Windows API。 还需要注意权限问题,确保NX进程有权限访问所选路径。此外,文件过滤器的设置,比如只显示特定类型的文件,如.prt文件。这可以通过设置过滤器字符串实现,比如在C++中使用&quot;*.prt&quot;。 可能还需要处理多选的情况,但用户的问题似乎只需要选择单个文件,所以可以忽略多选的部分。此外,错误处理也是重要的,比如检查用户是否取消对话框,函数返回的状态码等。 最后,生成相关问题时要考虑用户可能的后续问题,比如错误处理、默认路径设置、特定过滤器,或者如何在不同NX版本中使用这些函数。因此,相关问题可以包括这些方面,帮助用户进一步解决问题。&lt;/think&gt;在NX二次开发中实现文件路径文件名选择,主要通过NX Open API提供的文件对话框函数实现。以下是具体实现方法: ### 一、C/C++语言实现 使用$UF_UI_select_file$函数: ```c #include &lt;uf.h&gt; #include &lt;uf_ui.h&gt; char file_path[MAX_FSPEC_BUFFER]; const char *title = &quot;选择文件&quot;; const char *default_name = &quot;part.prt&quot;; const char *extension = &quot;*.prt&quot;; int response = UF_UI_select_file( title, // 对话框标题 default_name, // 默认文件名 extension, // 文件过滤器 UF_UI_SELECTION_EXISTING, // 选择模式 file_path // 返回路径 ); if (response == UF_UI_OK_STATUS) { // 处理选择的文件 } ``` 该函数支持多种选择模式[^1]: - $UF_UI_SELECTION_EXISTING$:选择现有文件 - $UF_UI_SELECTION_NEW$:创建新文件 - $UF_UI_SELECTION_DIRECTORY$:选择目录 ### 二、.NET语言实现 使用Windows Forms组件: ```csharp using System.Windows.Forms; OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = &quot;选择NX文件&quot;; openFileDialog.Filter = &quot;NX文件 (*.prt)|*.prt|所有文件 (*.*)|*.*&quot;; openFileDialog.InitialDirectory = @&quot;C:\NX_Files&quot;; if (openFileDialog.ShowDialog() == DialogResult.OK) { string selectedPath = openFileDialog.FileName; // 处理文件路径 } ``` 注意需要在NX项目中添加对$System.Windows.Forms$程序集的引用。 ### 三、关键参数说明 1. 文件过滤器格式: - C语言:$&quot;NX Parts (*.prt)|*.prt&quot;$ - .NET:$&quot;描述|过滤规则&quot;$ 格式 2. 初始化路径建议使用: $$UF_UI_get_default_directory(UF_UI_work_directory, default_path)$$ 3. 错误处理应检查返回状态码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值