Sample code for 30+ languages & platforms
DataFlex

Iterate over Files and Directories in Filesystem Directory Tree

Demonstrates how to use the Chilkat DirTree object/class to iterate over the names of files and sub-directories in a directory tree.

This example iterates over a directory tree that contains these files and sub-directories:

a
    images (sub-directory)
        dudeA.gif
        Thumbs.db
    hamlet.xml
    pigs.xml
    Setup.exe
b
    yyy (sub-directory)
    zzz (sub-directory)
        HelloWorld123.txt
        test123.txt
    dude.gif
    dudeC.gif
    hello.txt
    Thumbs.db
test123.txt
The output for the code below looks like this:
(sub-directory)
Relative Path: a
Absolute Path: c:\temp\abc123\a
Absolute UNC Path: \\?\c:\temp\abc123\a
----
(sub-directory)
Relative Path: b
Absolute Path: c:\temp\abc123\b
Absolute UNC Path: \\?\c:\temp\abc123\b
----
Size in bytes: 15
Relative Path: test123.txt
Absolute Path: c:\temp\abc123\test123.txt
Absolute UNC Path: \\?\c:\temp\abc123\test123.txt
----
Size in bytes: 279658
Relative Path: a\hamlet.xml
Absolute Path: c:\temp\abc123\a\hamlet.xml
Absolute UNC Path: \\?\c:\temp\abc123\a\hamlet.xml
----
(sub-directory)
Relative Path: a\images
Absolute Path: c:\temp\abc123\a\images
Absolute UNC Path: \\?\c:\temp\abc123\a\images
----
Size in bytes: 8463
Relative Path: a\pigs.xml
Absolute Path: c:\temp\abc123\a\pigs.xml
Absolute UNC Path: \\?\c:\temp\abc123\a\pigs.xml
----
Size in bytes: 24576
Relative Path: a\Setup.exe
Absolute Path: c:\temp\abc123\a\Setup.exe
Absolute UNC Path: \\?\c:\temp\abc123\a\Setup.exe
----
Size in bytes: 6221
Relative Path: b\dude.gif
Absolute Path: c:\temp\abc123\b\dude.gif
Absolute UNC Path: \\?\c:\temp\abc123\b\dude.gif
----
Size in bytes: 6221
Relative Path: b\dudeC.gif
Absolute Path: c:\temp\abc123\b\dudeC.gif
Absolute UNC Path: \\?\c:\temp\abc123\b\dudeC.gif
----
Size in bytes: 13
Relative Path: b\hello.txt
Absolute Path: c:\temp\abc123\b\hello.txt
Absolute UNC Path: \\?\c:\temp\abc123\b\hello.txt
----
Size in bytes: 10240
Relative Path: b\Thumbs.db
Absolute Path: c:\temp\abc123\b\Thumbs.db
Absolute UNC Path: \\?\c:\temp\abc123\b\Thumbs.db
----
(sub-directory)
Relative Path: b\yyy
Absolute Path: c:\temp\abc123\b\yyy
Absolute UNC Path: \\?\c:\temp\abc123\b\yyy
----
(sub-directory)
Relative Path: b\zzz
Absolute Path: c:\temp\abc123\b\zzz
Absolute UNC Path: \\?\c:\temp\abc123\b\zzz
----
Size in bytes: 6221
Relative Path: a\images\dudeA.gif
Absolute Path: c:\temp\abc123\a\images\dudeA.gif
Absolute UNC Path: \\?\c:\temp\abc123\a\images\dudeA.gif
----
Size in bytes: 6144
Relative Path: a\images\Thumbs.db
Absolute Path: c:\temp\abc123\a\images\Thumbs.db
Absolute UNC Path: \\?\c:\temp\abc123\a\images\Thumbs.db
----
Size in bytes: 6080
Relative Path: b\zzz\HelloWorld123.txt
Absolute Path: c:\temp\abc123\b\zzz\HelloWorld123.txt
Absolute UNC Path: \\?\c:\temp\abc123\b\zzz\HelloWorld123.txt
----
Size in bytes: 15
Relative Path: b\zzz\test123.txt
Absolute Path: c:\temp\abc123\b\zzz\test123.txt
Absolute UNC Path: \\?\c:\temp\abc123\b\zzz\test123.txt
----

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoDirTree
    Boolean iDoneIterating
    String sTemp1
    Integer iTemp1
    Boolean bTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatDirTree)) To hoDirTree
    If (Not(IsComObjectCreated(hoDirTree))) Begin
        Send CreateComObject of hoDirTree
    End

    // Specify the root of the directory tree to be traversed.
    Set ComBaseDir Of hoDirTree To "c:/temp/abc123"

    // Indicate that we want to recursively traverse the tree.
    Set ComRecurse Of hoDirTree To True

    // Begin the directory tree traversal.
    Get ComBeginIterate Of hoDirTree To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoDirTree To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComDoneIterating Of hoDirTree To iDoneIterating
    While (iDoneIterating <> True)

        // Examine the file or directory at the current traversal position:
        Get ComIsDirectory Of hoDirTree To bTemp1
        If (bTemp1 = True) Begin
            Showln "(sub-directory)"
        End
        Else Begin
            Get ComFileSize32 Of hoDirTree To iTemp1
            Showln "Size in bytes: " iTemp1
            // If the file size is larger than 2GB, then get the size as a decimal string.
            // (Chilkat provides a FileSize64 method in *some* programming languages. The FileSizeStr property is added in Chilkat v9.5.0.88)
            Get ComFileSizeStr Of hoDirTree To sTemp1
            Showln "Size in bytes: " sTemp1
        End

        Get ComRelativePath Of hoDirTree To sTemp1
        Showln "Relative Path: " sTemp1
        Get ComFullPath Of hoDirTree To sTemp1
        Showln "Absolute Path: " sTemp1
        Get ComFullUncPath Of hoDirTree To sTemp1
        Showln "Absolute UNC Path: " sTemp1
        Showln "----"

        // Advance to the next file or sub-directory in the tree traversal.
        Get ComAdvancePosition Of hoDirTree To iSuccess
        If (iSuccess <> True) Begin
            Get ComDoneIterating Of hoDirTree To bTemp1
            If (bTemp1 <> True) Begin
                Get ComLastErrorText Of hoDirTree To sTemp1
                Showln sTemp1
                Procedure_Return
            End

        End

        Get ComDoneIterating Of hoDirTree To iDoneIterating
    Loop



End_Procedure