用commondialog得到一个文件名,怎么获得它的扩展名啊??
请指教

解决方案 »

  1.   

    Private Sub Command1_Click()
        CommonDialog1.ShowOpen
        Text1 = Right(CommonDialog1.FileName, 3)
    End Sub
      

  2.   

    用FSO对象
    DIm Fso as New Filesystemobject
     Fso.GetExtensionName ( "CommonDialog1.FileName“)
      

  3.   

    Public Function GetFileType(FileName As String) As String
    Dim i As Integeri = InStrRev(FileName, ".")
    If i <> 0 Then
    GetFileType = Right(FileName, Len(FileName) - i)
    Else
    GetFileType = ""
    End If
    End Function
    当文件的扩展名不等于三个字母时(如:.h  .mpeg), sxs69() 的方法就会出错了!
      

  4.   

    可以利用 split (strFileName,".") 将文件名字劈开,就可以得到后缀名了。
      

  5.   

    liu584说的对。
    当文件的扩展名不等于三个字母时(如:.h  .mpeg), sxs69() 的方法就会出错了!
    当有一文件名AAA.bb.ccc.exe 时 qbilbo(风之兄)说的也不对,
     xueVB(学习中) 说的也有同样的问题。
      

  6.   

    mid("f.aadf.dd.a",instrrev("f.aadf.dd.a",".")+1)
      

  7.   

    mid("文件名",instrrev("文件名",".")+1)
      

  8.   

    楼上说的与qbilbo(风之兄)说的是同一个处理方法,
    建议用liu584的说法,比较方便。
    还有一个方法就是:取得文件名后如AAA.bb.ccc.exe,反转字符串exe.ccc.bb.AAA,再按qbilbo(风之兄)说的去做,这就错不了!
      

  9.   

    Dim FSO As Scripting.FileSystemObject
          Set FSO = CreateObject("Scripting.FileSystemObject")
          Text1.Text = FSO.GetExtensionName(CommonDialog1.FileName)要引用Microsoft Scripting Runtime 
    以试验过了可以用,无论后缀名是几位,但得到的是没有点的,“txt”"mdb"
      

  10.   

    说错了,应把qbilbo(风之兄)说的right()函数改为left()。再反转字符串,这才行!!!
      

  11.   

    dim mystring() as string
    mystring=split(filename,".")
    dim mystring1 as string
    mystring1=ubound(mystring)
      

  12.   

    不能只以“。”来看扩展名。。因为现在名命多着呢。。filename.txt.dat这种文件名也一样的存在啊。。所以就算用“。”也要以最后一个点为依据
      

  13.   

    晕,你们去看看MSDN上InStrRev函数的说明好不好。
      

  14.   

    看看我的怎么样:
    :)
    Dim a
    a = Split(CommonDialog1.FileName, ".")
    MsgBox a(1) 'a(1)既为所要的扩展名
      

  15.   

    你们的代码大部分有问题:
    假如对于没有扩展名的文件,你们的代码能完整解决问题吗?使用FSO除外。当然,有些机器是没有FSO权限的
    当然,知道了这点后,对“\”或":"等特殊路径的字符进行判断也是能做出来的。只不过语句得多写一些而已。
      

  16.   

    Public Function GetFileType(ByVal FileName As String) As String
    Dim i As Integeri = InStrRev(FileName, "\")
    FileName = IIf(i = 0, FileName, Right(FileName, Len(FileName) - i))i = InStrRev(FileName, ".")GetFileType = IIf(i = 0, "", Right(FileName, Len(FileName) - i))
    这下把所有的情况都考虑进去了!其实我前面的那个函数已经将没有后缀名的情况考虑进去了,但在文件没有后缀名,但目录名中有"."的情况下会出错。至于引用FSO,我认为为了这么小的一个功能,在程序中多用一个DLL,实在是划不来!
      

  17.   

    试问这样的一个文件:
         文件名 aaa.bbb
         扩展名 ccc.ddd
         一共是 aaa.bbb.ccc.ddd
    可以么?
      

  18.   

    toLa11s(不得其解) 那你建立一个这样的文件,看看WINDOWS认为它的扩展名是什么。   :)
      

  19.   

    多谢,我以前用的是sxs69一样的方法,没想到有这么多问题!:)
      

  20.   

    将其全部复制,粘贴到一个文件,改名为.CLS
    VERSION 1.0 CLASS
    BEGIN
      MultiUse = -1  'True
      Persistable = 0  'NotPersistable
      DataBindingBehavior = 0  'vbNone
      DataSourceBehavior  = 0  'vbNone
      MTSTransactionMode  = 0  'NotAnMTSObject
    END
    Attribute VB_Name = "FileDirctory"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = True
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
    Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
    ''''''
    ''''''这个类模块用于得到文件的有关路径
    ''''''作者:董含君
    ''''''版本:2003年4月19日 15.10
    '''''''''''''''''''''''''''''
    '保持属性值的局部变量
    Private FFN As String '局部复制
    '保持属性值的局部变量
    Private mvarErrEvent As String '局部复制
    Private mvarErrNumber As Long '局部复制
    Const IsDebugMode = True
    Public Property Let ErrNumber(ByVal vData As Long)
    Attribute ErrNumber.VB_Description = "返回一个数字,表示错误号码"
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.ErrNumber = 5
        mvarErrNumber = vData
    End Property
    Public Property Get ErrNumber() As Long
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.ErrNumber
        ErrNumber = mvarErrNumber
    End PropertyPublic Property Let ErrEvent(ByVal vData As String)
    Attribute ErrEvent.VB_Description = "用于返回错误信息方便调试"
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.ErrEvent = 5
        mvarErrEvent = vData
    End Property
    Public Property Get ErrEvent() As String
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.ErrEvent
        ErrEvent = mvarErrEvent
    End PropertyPublic Function IsFileExist() As Boolean
    Attribute IsFileExist.VB_Description = "判断用户指定的文件是否存在"
    If IsFileName Then
        If Dir(FFN) <> "" Then IsFileExist = True Else IsFileExist = False
    End If
    SetNormal
    End FunctionPublic Function GetDriverName(Optional U As Boolean) As String
    Attribute GetDriverName.VB_Description = "得到驱动器的名称,可选参数U表示返回时大写"
    If Not IsFileName Then Exit Function
    Dim Temp1 As String
    Temp1 = Left(FFN, 1)
    If U Then Temp1 = UCase(Temp1)
    GetDriverName = Temp1
    SetNormal
    End FunctionPublic Function GetPrimaryName(Optional U As Boolean) As String
    Attribute GetPrimaryName.VB_Description = "得到不带有目录的文件名,可选参数U表示返回时大写"
    If IsFileName = False Then Exit Function
    Dim TshortName As String
    TshortName = GetShortName
    If Not mvarErrNumber = 0 Then Exit Function
    Dim TDot As Long
    Dim TChr As String
    Dim i As Long
    For i = Len(TshortName) To 1 Step -1
        TChr = Mid(TshortName, i, 1)
        If TChr = "." Then
            TDot = i
            Exit For
        End If
    Next
    If TDot = 0 Then   '没有扩展名
        TDot = 0
    Else
        TshortName = Left(TshortName, TDot - 1)
    End If
    If U Then TshortName = UCase(TshortName)
    GetPrimaryName = TshortName
    SetNormal
    End FunctionPublic Function GetFileNameLength() As Long
    Attribute GetFileNameLength.VB_Description = "得到文件名的长度"
    If Not IsFileName Then Exit Function
    Dim TshortName As String
    TshortName = GetShortName
    If Not mvarErrNumber = 0 Then Exit Function
    GetFileNameLength = Len(TshortName)
    SetNormal
    End FunctionPublic Function GetExtName(Optional U As Boolean) As String
    Attribute GetExtName.VB_Description = "返回文件的扩展名,可选参数U表示返回时大写"
    If Not IsFileName Then Exit Function
    Dim TExt As String
    Dim i As Long
    Dim TChr As String
    Dim TDot As Long
    Dim TshorName As String
    TshorName = GetShortName
    If Not mvarErrNumber = 0 Then Exit Function
    For i = Len(TshorName) To 1 Step -1
        TChr = Mid(TshorName, i, 1)
        If TChr = "." Then
            TDot = i
            Exit For
        End If
    Next
    If TDot = 0 Then
        GetExtName = ""     '没有扩展名
        SetNormal
        Exit Function
    Else
        TStr = Right(TshorName, Len(TshorName) - TDot)
        
    End If
    If U Then TStr = UCase(TStr)
    GetExtName = TStr
    SetNormal
    End FunctionPublic Function GetShortName(Optional U As Boolean) As String
    Attribute GetShortName.VB_Description = "得到不含扩展名的文件名,可选参数U表示返回时大写"
    If Not IsFileName Then Exit Function
    Dim i As Long
    Dim LastPosition As Long
    Dim TStr As String
    Dim TChr As String
    For i = Len(FFN) To 1 Step -1
        TChr = Mid(FFN, i, 1)
        If TChr = "\" Then
            LastPosition = i
            Exit For
        End If
    Next
    TStr = Right(FFN, Len(FFN) - LastPosition)
    If Len(TStr) > 255 Then
        If IsDebugMode Then MsgBox "出现非法文件名,长度大于255"
        mvarErrEvent = "出现非法文件名,长度大于255"
        mvarErrNumber = 5
        Exit Function
    End If
    If U Then TStr = UCase(TStr)
    GetShortName = TStr
    SetNormal
    End Function
    Public Function GetDirctoryName(Index As Long, Optional U As Boolean) As String
    Attribute GetDirctoryName.VB_Description = "得到目录的名字,Index 用于指定目录的层数,其最大值不能大于GetDirctoryNumber的返回数值"
    If Not IsFileName Then Exit Function
    If Index > GetDirctoryNumber Then
        If IsDebugMode Then MsgBox "index 不能大于GetDirectoryNumkber"
        mvarErrEvent = "index 不能大于GetDirectoryNumkber"
        mvarErrNumber = 4
        Exit Function
    End If
    Dim TStr As String
    If Index = 1 Then  '跟目录
        GetDirctoryName = ""
        SetNormal
        Exit Function
    Else
        Dim Tstart As Long
        Dim Tend As Long
        Tend = 0
        Dim i As Long
        Dim Tnow As Long
        Dim TChr As String
        For i = 1 To Len(FFN)
            If Mid(FFN, i, 1) = "\" Then
                Tnow = Tnow + 1
                If Tnow = Index - 1 Then Tstart = i + 1  '不保留 "\"
                If Tnow = Index Then Tend = i
                If (i = Len(FFN)) And (Tend = 0) Then Tend = i  '
            End If
            '''''''
            '此句为错误保护,正常运行不应该出现此错误
        Next
        For i = Tstart To Tend
            TChr = Mid(FFN, i, 1)
            TStr = TStr + TChr
        Next
    End If
    If U Then TStr = UCase(TStr)
    If Right(TStr, 1) = "\" Then TStr = Left(TStr, Len(TStr) - 1)
    GetDirctoryName = TStr
    SetNormal
    End FunctionPublic Function GetDirctoryNumber() As Long
    Attribute GetDirctoryNumber.VB_Description = "返回文件名的目录层数例如""C:\\a\\a.txt"" 是2层"
    If Not IsFileName Then Exit Function
    Dim T1 As Long
    Dim i As Long
    T1 = 0
    If Right(FFN, 1) = "\" Then
        If IsDebugMode Then MsgBox "文件名不能以 \ 结束"
        mvarErrEvent = "文件名不能以 \ 结束"
        mvarErrNumber = 3
        Exit Function
    End If
    For i = 1 To Len(FFN)
        If Mid(FFN, i, 1) = "\" Then T1 = T1 + 1
    Next
    GetDirctoryNumber = T1
    SetNormal
    End Function
    Public Property Let FullFileName(ByVal vData As String)
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.FullFileName = 5
        FFN = vData
        
        IsFileName  '监测是否有效
            
    End Property
    Public Property Get FullFileName() As String
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.FullFileName
        FullFileName = FFN
    End Property
    Function IsFileName() As Boolean
    Attribute IsFileName.VB_Description = "判断文件名是否有效"
    IsFileName = False
    ''''''''''''''''''''''''''''''''
    '''用于除掉没用的“空操作”符号
    Dim Tmp1 As Long
    Dim Tmp2 As String
    Dim TmpChr As String
    Dim i As Long
    Tmp1 = Len(FFN)
    For i = 1 To Tmp1
        TmpChr = Mid(FFN, i, 1)
        If TmpChr <> Chr(0) Then
            Tmp2 = Tmp2 + TmpChr
        Else
            Exit For
        End If
    Next
    FFN = Tmp2
    '''用于除掉没用的“空操作”符号
    ''''''''''''''''''''''''''''''''''
    FFN = Trim(FFN)  '除掉没用的空格
    If Len(FFN) < 4 Then
        If IsDebugMode Then MsgBox "无效的文件名,文件名至少4个字符"
        mvarErrEvent = "无效的文件名,文件名至少4个字符"
        mvarErrNumber = 1
        IsFileName = False
        Exit Function
    End If
    If Mid(FFN, 2, 2) <> ":\" Then
        If IsDebugMode Then MsgBox "无效的文件名,没有完整的路径"
        mvarErrEvent = "无效的文件名,没有完整的路径"
        mvarErrNumber = 2
            
        IsFileName = False
        Exit Function
    End If
    IsFileName = True
    SetNormal
    End Function
    Private Sub SetNormal()
    mvarErrEvent = "正常"
    mvarErrNumber = 0
    End Sub
      

  21.   

    这是,配套的,用于测试类模块的Form
    VERSION 5.00
    Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   4890
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   5475
       LinkTopic       =   "Form1"
       ScaleHeight     =   4890
       ScaleWidth      =   5475
       StartUpPosition =   3  '窗口缺省
       Begin VB.TextBox Text10 
          Height          =   375
          Left            =   240
          TabIndex        =   10
          Text            =   "Text10"
          Top             =   4320
          Width           =   4335
       End
       Begin VB.TextBox Text9 
          Height          =   375
          Left            =   240
          TabIndex        =   9
          Text            =   "Text9"
          Top             =   3840
          Width           =   4335
       End
       Begin VB.TextBox Text8 
          Height          =   270
          Left            =   240
          TabIndex        =   8
          Text            =   "Text8"
          Top             =   3480
          Width           =   4335
       End
       Begin VB.TextBox Text7 
          Height          =   270
          Left            =   240
          TabIndex        =   7
          Text            =   "点击这里列出目录"
          Top             =   3120
          Width           =   4335
       End
       Begin VB.TextBox Text6 
          Height          =   270
          Left            =   240
          TabIndex        =   6
          Text            =   "Text6"
          Top             =   2760
          Width           =   4335
       End
       Begin VB.TextBox Text5 
          Height          =   270
          Left            =   240
          TabIndex        =   5
          Text            =   "Text5"
          Top             =   2400
          Width           =   4335
       End
       Begin VB.TextBox Text4 
          Height          =   270
          Left            =   240
          TabIndex        =   4
          Text            =   "Text4"
          Top             =   2040
          Width           =   4335
       End
       Begin VB.TextBox Text3 
          Height          =   270
          Left            =   240
          TabIndex        =   3
          Text            =   "Text3"
          Top             =   1680
          Width           =   4335
       End
       Begin VB.TextBox Text2 
          Height          =   270
          Left            =   240
          TabIndex        =   2
          Text            =   "Text2"
          Top             =   1320
          Width           =   4335
       End
       Begin VB.TextBox Text1 
          Height          =   270
          Left            =   240
          TabIndex        =   1
          Text            =   "Text1"
          Top             =   840
          Width           =   4335
       End
       Begin VB.CommandButton Command1 
          Caption         =   "ShowOpen"
          Height          =   375
          Left            =   120
          TabIndex        =   0
          Top             =   240
          Width           =   1815
       End
       Begin MSComDlg.CommonDialog CD 
          Left            =   3000
          Top             =   600
          _ExtentX        =   847
          _ExtentY        =   847
          _Version        =   393216
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Dim a As New FileDirctory
    Private Sub Command1_Click()
    CD.ShowOpena.FullFileName = CD.FileName
    Text1 = "FullName=" + a.FullFileName
    Text2 = "GetDirectoryNumber=" + CStr(a.GetDirctoryNumber)
    Text3 = "GetDriverName=" + a.GetDriverName
    Text4 = "GetExtName=" + a.GetExtName
    Text5 = "GetPrimaryName=" + a.GetPrimaryName
    Text6 = "GetFileLength=" + CStr(a.GetFileNameLength)
    Text8 = "GetShortName=" + a.GetShortName
    Text9 = "ErrEvent=" + a.ErrEvent
    Text10 = "ErrNumber=" + CStr(a.ErrNumber)End SubPrivate Sub Form_Click()
    Text9 = "ErrEvent=" + a.ErrEvent
    Text10 = "ErrNumber=" + CStr(a.ErrNumber)End SubPrivate Sub Text7_Click()
    Dim s As String
    s = InputBox("Index")
    Text7 = "GetDirctoryName=" + a.GetDirctoryName(CLng(s))
    End Sub