Dir Function

Description

Returns a String representing the name of a file, directory, or folder that matches a specified pattern or file attribute, or the volume label of a drive.

Syntax

Dir[(pathname[, attributes])]

The Dir function syntax has these parts

Part

Description

pathname

Optional. String expression that specifies a file name — may include directory or folder, and drive. A zero-length string (" ") is returned if pathname is not found.

attributes

Optional. Constant or numeric expression, whose sum specifies file attributes. If omitted, all files are returned that match pathname.


Settings

The attributes argument settings are

Constant

Value

Description

vbNormal

0

Normal.

vbHidden

2

Hidden.


(continue)

vbSystem

4

System file.

vbVolume

8

Volume label; if specified, all other attributes are ignored.

vbDirectory

16

Directory or folder.


Note   These constants are specified by Visual Basic for Applications and can be used anywhere in your code in place of the actual values.

Remarks

Dir supports the use of multiple-character (*) and single-character (?) wildcards to specify multiple files.

You must specify pathname the first time you call the Dir function, or an error occurs. If you also specify file attributes, pathname must be included.

Dir returns the first file name that matches pathname. To get any additional file names that match pathname, call Dir again with no arguments. When no more file names match, Dir returns a zero-length string (" "). Once a zero-length string is returned, you must specify pathname in subsequent calls or an error occurs. You can change to a new pathname without retrieving all of the file names that match the current pathname. However, you can't call the Dir function recursively. Calling Dir with the vbDirectory attribute does not continually return subdirectories.

Tip   Because file names are retrieved in no particular order, you may want to store returned file names in an array and then sort the array.

See Also

ChDir statement, CurDir function, MacID function.

Specifics (Macintosh)

In Microsoft Windows, Dir supports the use of multiple character (*) and single character (?) wildcards to specify multiple files. On the Macintosh, these characters are treated as valid file name characters and can't be used as wildcards to specify multiple files.

Since the Macintosh doesn't support the wildcards, use the file type to identify groups of files. You can use the MacID function to specify file type instead of using the file names. For example, the following statement returns the name of the first TEXT file in the current folder:

Dir("SomePath", MacID("TEXT"))
To iterate over all files in a folder, specify an empty string:

Dir("")
If you use the MacID function with Dir in Microsoft Windows, an error occurs.

Any attribute value greater than 256 is considered a MacID value.

The following constants aren't available on the Macintosh

Constant

Value

Description

vbSystem

4

System file

vbVolume

8

Volume label


The following constant is available only on the Macintosh

Constant

Value

Description

vbAlias

64

Specified file name is an alias.


Example

This example uses the Dir function to check if certain files and directories exist. The MacID function may be used on the Macintosh to specify the file type.

Dim MyFile, MyPath, MyName
' In Microsoft Windows:
' Returns "WIN.INI" 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

' On the Macintosh:
' Use the MacID function to specify file type.
' The following statement returns the first "TEXT" file found in the 
' specified directory or folder.
MyFile = Dir("HD:MY FOLDER:", MacID("TEXT"))