DataFlex
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
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