• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    VB查找文件的兩種方法

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 62次 | 進入軟件測試論壇討論

    領測軟件測試網 民政部信息中心 方云波

    ---- VB開發人員都會遇到文件定位的問題。VB提供的Dir[(pathname[, attributes])]函數應該可以滿足各種文件定位問題。使用Dir函數時,我們必須給它提供文件的全部路徑,否則是找不到的。而有時我們往往是不知道文件的路徑的,如果要利用該函數來定位文件,我們必須編寫一定的代碼。筆者在利用該函數編制查找文件的函數時,頗費了些工夫,可是發現查找的效率不高,效果不太理想。那么有沒有編碼少且更快的方法查找文件呢?筆者后來利用一個 API函數成功地編制了一個高效率的查找文件的函數。下面一一介紹給大家,起個拋磚引玉的作用,期望大家能編制出更高效的函數。

    ---- 一. 利用DIR函數查找文件

    ---- Dir[(pathname[, attributes])]是VB提供的用來檢查某些文件或目錄是否存在的函數,它返回一個 String,用以表示一個文件名、目錄名或文件夾名稱,返回值必須與指定的模式或文件屬性、或磁盤卷標相匹配。

    ---- 如果文件的路徑很清楚,那么確定文件是否存在簡單地調用該函數就行了。如果光知道文件名,甚或只知道文件的后綴,要定位文件的話就需要一定的編碼了。下面的例子用來定位c:\下所有目錄內是否有文件Win.ini。

    Function FindDirectory(RootPath As
    String, Mydirectory() As String)
    Dim intResult, I, intFind As Integer
    ‘首先查找根目錄下的所有子目錄
    MyPath = "c:\"  注釋: 指定路徑c:\。
    MyName = Dir(MyPath, vbDirectory)   注釋: 找尋第一項。
    intResult = 1
    ReDim Mydirectory(intResult) ‘初始化動態數組
    Do While MyName < > ""   注釋: 開始循環。
        注釋: 跳過當前的目錄及上層目錄。
        If MyName < > "." And MyName < > ".." Then
            注釋: 使用位比較來確定 MyName 代表一目錄。
            If (GetAttr(MyPath & MyName)
            And vbDirectory) = vbDirectory Then
            
          注釋: 如果它是一個目錄,將其名稱存儲在一個數組里。
          Mydirectory(intResult) = MyPath & MyName
          intResult = intResult + 1
           ReDim Preserve Mydirectory(intResult)
    ‘分配動態數組實際的元素個數,并保留數組中的數據
         End If
        End If
        MyName = Dir    注釋: 查找下一個目錄。
    Loop
    ‘在所有目錄里分別查找文件是否存在。
    For I = 1 To UBound(Mydirectory)-1
        MyFile = Mydirectory(I) & "\win.ini"
        intFind = Len(Dir(MyFile))
        If intFind < > 0 Then MsgBox "找到文件" &
           Dir(MyFile) & "在:" & Mydirectory(I)
    Next I
    End Function

    ---- 該函數的思路很清晰:先遍歷根目錄下所有的子目錄,然后在每個子目錄里查找文件。該函數有一個缺陷:只能查找根目錄下的一級子目錄,無法遍及整個硬盤。如果要遍及整個硬盤,還需要額外的編碼,這里不再多述。

    ---- 二. 利用API函數查找文件

    ---- 在使用VB的過程中我深深地體會到,只有充分利用API的函數才能更充分地發揮VB的優勢。 API函數 SearchTreeFile可以很快地定位一個文件。借助該函數筆者編了一個快速查找文件的函數sysFileFind.

    Declare
    Public Declare Function SearchTreeForFile Lib
    "imagehlp.dll" (ByVal lpRoothPath As String,
    ByVal lpInputName As String,
    ByVal lpOutputName As String) As Long

    ---- 下面為sysFileFind函數的編碼:

    Public Function sysFileFind
    (ByVal WhichRootPath As String,
    ByVal WhichFileName As String) As String
    Dim iNull As Integer
    Dim lResult As Long
    Dim sBuffer As String
        On Error GoTo L_FILEFINDERROR
        sBuffer = String$(1024, 0)
        注釋:查找文件
    lResult = SearchTreeForFile
    (WhichRootPath, WhichFileName, sBuffer)
        注釋:如果文件找到,將返回字符串后續的空格刪除
        注釋:否則返回一個空字符串
        If lResult Then
            iNull = InStr(sBuffer, vbNullChar)
            If Not iNull Then
                sBuffer = Left$(sBuffer, iNull - 1)
            End If
            sysFileFind = sBuffer
            Else
                sysFileFind = ""
        End If
    Exit Function
    L_FILEFINDERROR:
    MsgBox "查找文件過程中遇到錯誤!",
    vbInformation, "查找文件錯誤"
    sysFileFind = Format(Err.Number)
    & " - " & Err.Description
    End Function

    ---- 該函數可以很快遍歷整個硬盤,從而查找到我們所需的文件。

    ---- 三. 總結

    ---- 上面兩個函數都在中文VB5和Win98環境下調試通過。我們可以看到第二種方法編碼更簡單,效率更高。

    ---- VB5強大的功能贏得了越來越多開發人員的青睞。如果適當地利用API函數,我們可以說,利用VB可以輕松地完成我們開發中的所有任務。 

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>