我做的是数据库,以前还没考虑到压缩时我是以源文件存放在程序的目录下,当然是采用相对路径,程序在做时放在E:\数据库\下,由于要实现查询到可以打开文件,因此我把文件存放在"E:\数据库\文件\"这个文件夹下,把文件的地址存放进去,在程序里用TextBox与文件的地址这个字段绑定,然后根据不同的文件后缀名实现不同的打开方式
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub command1_click()
    Dim FileTypestr As String
    Dim sFileName, sContent As String   '打开word文档
    Dim wrdApp As Object
    sFileName = Text2.Text
    If Err <> 0 Then Exit Sub
    If sFileName = "" Then Exit Sub
    FileTypestr = ExtractFileName(sFileName)
If LCase(FileTypestr) = "doc" Then
   Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    wrdApp.Documents.Open FileName:=sFileName, ReadOnly:=True
    sContent = wrdApp.ActiveDocument.Content
End If
If LCase(FileTypestr) = "jpg" Then
        ShellExecute 0, "open", sFileName, vbNullString, vbNullString, 5
End If
End Sub
Private Function ExtractFileName(ByVal PathName As String) As String
    Dim str_Pos As Integer
    str_Pos = InStrRev(PathName, ".")
    ExtractFileName = Mid(PathName, str_Pos + 1)
End Function
这是原来还没考虑压缩前可以实现的,但现在一压缩了,我还是把被压缩后的文件都放在"E:\数据库\文件"这个文件夹下,把我的源文件删除了,我解压后的文件也都放在这个文件夹下,我现在怎么实现打开被解压的文件呢,我的想法是有没有获得被解压的文件类型和文件名呢?

解决方案 »

  1.   

    也就是我现在在程序里被绑定的文件名都是以".rar"为后缀的,没办法根据".doc",".jpg"来选择不同的打开方式
      

  2.   

    真是没有办法了,判断一下,如果是rar的才解压缩,否则直接shellexcute嘛。不过老兄,今天我实在是看不大懂你的意思
      

  3.   

    如果1.想让用户直接解压,那就不能打开,让用户自己去开,解到什么地方去什么地方开,你程序不要管!
    2.想直接解压后打开,你必须在解压时指定好路径,然后看下面写模块里面Public Const INVALID_HANDLE_VALUE = -1
    Public Const MAX_PATH = 260
    Public Const FILE_ATTRIBUTE_READONLY = &H1
    Public Const FILE_ATTRIBUTE_HIDDEN = &H2
    Public Const FILE_ATTRIBUTE_SYSTEM = &H4
    Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
    Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
    Public Const FILE_ATTRIBUTE_NORMAL = &H80
    Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
    Public Const FILE_ATTRIBUTE_COMPRESSED = &H800Public Type FILETIME   dwLowDateTime As Long
       dwHighDateTime As Long
       
    End TypePublic Type SECURITY_ATTRIBUTES   nLength As Long
       lpSecurityDescriptor As Long
       bInheritHandle As Long
       
    End TypePublic Type WIN32_FIND_DATA   dwFileAttributes As Long
       ftCreationTime As FILETIME
       ftLastAccessTime As FILETIME
       ftLastWriteTime As FILETIME
       nFileSizeHigh As Long
       nFileSizeLow As Long
       dwReserved0 As Long
       dwReserved1 As Long
       cFileName As String * MAX_PATH
       cAlternate As String * 14
       
    End TypePrivate Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As LongSub Open(ByVal strDir As String)     
        Dim WFD As WIN32_FIND_DATA
        Dim SA As SECURITY_ATTRIBUTES
        Dim hFile As Long
        Dim bNext As Long
        Dim fCount As Long
        Dim currFile As String
        Dim strFileList As String
        
        WFD.cFileName = Space$(256)
        
        hFile = FindFirstFile(strDir, WFD)''根据你的路径,找第一个
            
        strFileList = ""
            
        If (hFile = INVALID_HANDLE_VALUE) Then
            
            Exit Function''没有就over
            
        End If
        
        ShellExecute hwnd, "open", strFileName, "", "", vbNormalFocus     
        Dim i As Integer
        
        Do
            
            bNext = FindNextFile(hFile, WFD)
            
        ShellExecute hwnd, "open", strFileName, "", "", vbNormalFocus     
            
        Loop Until bNext = 0
        
        FindClose (hFile)
        
        
    End sub不怕机子over的,就用吧,哈哈~~如果有100个文件,就打开100个,嘿嘿