注意
若 Microsoft Jet Expression Service 以沙盒模式執行,則本主題所述的函式、方法、物件或屬性將被禁用,避免評估潛在不安全的表達式。 想了解更多沙盒模式的資訊,請在說明中搜尋「sandbox mode」。
回傳一個字 串 ,代表與特定模式或檔案屬性相符的檔案、目錄或資料夾名稱,或磁碟的磁碟區標籤。
語法
Dir[ (路徑名稱 [, 屬性] ) ]
Dir 函數語法包含以下參數:
| 引數 | 描述 |
|---|---|
| 路徑名稱 | 可省略。 指定檔名的字串表達式——可包含目錄或資料夾,以及磁碟機。 若找不到 路徑名稱 ,則回傳一個長度為零的字串 (“”“) 。 |
| 屬性 | 可省略。 常數或數值表達式,其和指定檔案屬性。 若省略,則回傳路徑 名稱 相符但無屬性的檔案。 |
設定
屬性參數設定如下:
| 恆定 | 值 | 描述 |
|---|---|---|
| vb正常 | 0 | (預設) 指定無屬性的檔案。 |
| vbReadOnly | 1 | 除了沒有屬性的檔案外,還指定唯讀檔案。 |
| vb隱藏 | 2 | 除了沒有屬性的檔案外,還指定隱藏檔案。 |
| VbSystem | 4 | 除了沒有屬性的檔案外,還指定系統檔案。 Macintosh 上無法提供。 |
| vbVolume | 8 | 指定體積標籤;若指定其他屬性,則忽略 vbVolume 。 Macintosh 上無法提供。 |
| vbDirectory | 16 | 除了沒有屬性的檔案外,還指定目錄或資料夾。 |
| vb別名 | 64 | 指定的檔案名稱是別名。 僅在 Macintosh 上提供。 |
注意
這些常數由 Visual Basic for Applications (VBA) 指定,可以在程式碼中任意使用,取代實際值。
註解
在 Microsoft Windows 中, Dir 支援使用多字元 () * 及單字元 (?) 萬用字元來指定多個檔案。 在 Macintosh 上,這些字元被視為有效的檔名字元,不能用作通配字碼來指定多個檔案。
由於 Macintosh 不支援萬用卡,請使用檔案類型來識別檔案群組。 你可以用 MacID 函式來指定檔案類型,而不是直接用檔名。 例如,以下陳述句會回傳當前資料夾中第一個 TEXT 檔案的名稱:
Dir("SomePath", MacID("TEXT"))
要遍歷資料夾中的所有檔案,請指定一個空字串:
Dir("")
如果你在 Windows 裡用 MacID 功能搭配 Dir 出現錯誤。
任何屬性值大於 256 的屬性都被視為 MacID 值。
第一次呼叫 Dir 函式時必須指定路徑名稱,否則會發生錯誤。 如果你也指定檔案屬性,必須包含 路徑名稱 。
Dir 會回傳第一個與 路徑名稱相符的檔名。 若要取得任何與 路徑名稱相符的額外檔案名稱,請再次呼叫 Dir ,且不包含參數。 當沒有其他檔案名稱相符時, Dir 會回傳一個零長度的字串 (“”) 。 一旦回傳一個零長度的字串,你必須在後續呼叫中指定 路徑名稱 ,否則就會發生錯誤。 你可以在不取得所有與目前路徑名稱相符的檔案名的情況下,切換到新的路徑名稱。 不過,你無法遞迴呼叫 Dir 函式。 使用 vbDirectory 屬性呼叫 Dir 並不會持續回傳子目錄。
提示 由於檔案名稱的取得順序沒有特定順序,你可能想先將回傳的檔案名稱存放在陣列中,然後再對陣列進行排序。
範例
注意
下列範例示範如何在 Visual Basic for Applications (VBA) 模組中使用此函數。 如需使用 VBA 的詳細資訊,請在 [搜尋] 旁的下拉式清單中選取 [開發人員參考],並在 [搜尋] 方塊中輸入一個或多個字詞。
此範例使用 Dir 函式來檢查某些檔案與目錄是否存在。 在 Macintosh 上,「HD:」是預設的磁碟名稱,路徑名稱的部分以冒號分隔,而非反斜線。 此外,Windows 的萬用字元在 Macintosh 上被視為有效的檔名字元。 不過,你可以用 MacID 功能來指定檔案群組。
Dim MyFile, MyPath, MyName
' Returns "WIN.INI" (on Microsoft Windows) if it exists.
MyFile = Dir("C:\WINDOWS\WIN.INI")
' Returns filename with specified extension. If more than one *.ini
' file exists, the first file found is returned.
MyFile = Dir("C:\WINDOWS\*.INI")
' Call Dir again without arguments to return the next *.INI file in the
' same directory.
MyFile = Dir
' Return first *.TXT file with a set hidden attribute.
MyFile = Dir("*.TXT", vbHidden)
' Display the names in C:\ that represent directories.
MyPath = "c:\" ' Set the path.
MyName = Dir(MyPath, vbDirectory) ' Retrieve the first entry.
Do While MyName <> "" ' Start the loop.
' Ignore the current directory and the encompassing directory.
If MyName <> "." And MyName <> ".." Then
' Use bitwise comparison to make sure MyName is a directory.
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' Display entry only if it
End If ' it represents a directory.
End If
MyName = Dir ' Get next entry.
Loop