注意
如果 Microsoft Jet 運算式服務以沙箱模式執行,則會停用本主題中所述的函數、方法、物件或屬性,這會防止評估可能不安全的運算式。 如需沙箱模式的詳細資訊,請在說明中搜尋「沙箱模式」。
傳回一個 字串 ,代表符合指定模式或檔案屬性的檔案、目錄或資料夾名稱,或磁碟機的磁碟區標籤。
語法
Dir[ (pathname [, attributes] ) ]
Dir 函數語法具有下列引數:
| 引數 | 描述 |
|---|---|
| pathName | 可省略。 指定檔案名稱的字串運算式,可能包含 directory 或 folder 和 drive。 如果找不到 路徑名稱 ,將傳回零長度字串 (“”) 。 |
| 屬性 | 可省略。 常數或數字運算式,其總和會指定檔案屬性。 如果省略,則會傳回符合 路徑名稱 但沒有屬性的檔案。 |
設定
屬性引數設定如下:
| 常數 | 值 | 描述 |
|---|---|---|
| vbNormal | 0 | (預設) 指定沒有屬性的檔案。 |
| vbReadOnly | 1 | 除了沒有屬性的檔案外,還會指定唯讀檔案。 |
| vbHidden | 2 | 除了沒有屬性的檔案外,還會指定隱藏的檔案。 |
| VbSystem | 4 | 除了沒有屬性的檔案外,還會指定系統檔案。 不適用於 Macintosh。 |
| vbVolume | 8 | 指定磁碟區標籤;如果指定了任何其他屬性,則忽略 vbVolume 。 不適用於 Macintosh。 |
| vbDirectory | 16 | 除了沒有屬性的檔案外,還會指定目錄或資料夾。 |
| vbAlias | 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 函數時指定路徑名稱,否則會發生錯誤。 如果您還指定檔案屬性,則必須包含 pathname 。
Dir 會傳回符合 pathname 的第一個檔案名稱。 若要取得任何其他符合 pathname 的檔案名稱,請再次呼叫 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