---
product: Chilkat
product_version: 11.7.0
language: tcl
language_label: Tcl
class: DirTree
license: free
deprecated: false
reference_html: https://www.chilkatsoft.com/refdoc/tclDirTreeRef.html
---
# Chilkat DirTree — Tcl — v11.7.0

> Chilkat 11.7.0 · language=tcl · class=DirTree
> Other versions: replace `11.7.0` in this URL. Other languages: `https://www.chilkatsoft.com/ai-docs/v/11.7.0/<lang>/classes/DirTree.md`.
> Language-wide rules (install, unlock, error model, strings/bytes): `https://www.chilkatsoft.com/ai-docs/v/11.7.0/tcl/guide.md`.

## Purpose

**Iterate through files and subdirectories under a base directory.**

`Chilkat.DirTree` is a lightweight directory-tree iterator for traversing files and subdirectories under a selected base directory. It supports recursive and non-recursive traversal and exposes useful information about the current item, including absolute path, UNC path, relative path, file size, and whether the current item is a directory.

**Directory traversal**

Iterate through the contents of a base directory, either recursively or one level at a time.

**Current-item details**

Get the current item's full path, relative path, UNC path, size, and directory/file status.

**Recursive scanning**

Traverse entire directory trees when an application needs to process all nested files and folders.

**Non-recursive listing**

Limit iteration to the immediate contents of the base directory when deeper traversal is not needed.

**Path-friendly output**

Use absolute or relative paths depending on whether the application needs filesystem access or archive-style relative names.

**Error-aware iteration**

Use `DoneIterating` to distinguish normal completion from an error when an iteration method returns false.

**Common pattern:** Set the base directory and recursion behavior, begin iterating, process each current item using the path and metadata properties, then check `DoneIterating` when iteration stops to determine whether traversal completed normally or ended because of an error.

For an extended overview, see [DirTree Class Overview](https://www.chilkatsoft.com/dirtree_class_overview.asp).

## Object creation, unlocking and error handling

**Object Creation**

```tcl
# 'this' is not a keyword in Tcl. It can freely be used as a variable name.
set this [new CkDirTree]
```

Call `Global.UnlockBundle` once at the start of the program, before using this or any other Chilkat class. Any string unlocks a fully functional 30-day trial; a purchased unlock code is used in production. See `guide.md` for the exact code in Tcl.

How failure is reported depends on the method's return type and is stated in the note under each method below. In every case the diagnostic text is in the `LastErrorText` property of the object whose method was called.

## Members common to every Chilkat class

Documented once per language in `common-members.md`; listed here so this page is self-contained.

| Property | Signature | Access | Meaning |
|---|---|---|---|
| `DebugLogFilePath` | `string # ckStr is a CkString CkDirTree_get_DebugLogFilePath $this $ckStr set strVal [CkDirTree_get_debugLogFilePath $this] CkDirTree_put_DebugLogFilePath $this $strVal` | read/write | If set to a file path, this property logs the LastErrorText of each Chilkat method or property call to the specified file. |
| `LastErrorHtml` | `string # ckStr is a CkString CkDirTree_get_LastErrorHtml $this $ckStr set strVal [CkDirTree_get_lastErrorHtml $this]` | read-only | Provides HTML-formatted information about the last called method or property. |
| `LastErrorText` | `string # ckStr is a CkString CkDirTree_get_LastErrorText $this $ckStr set strVal [CkDirTree_get_lastErrorText $this]` | read-only | Provides plain text information about the last called method or property. |
| `LastErrorXml` | `string # ckStr is a CkString CkDirTree_get_LastErrorXml $this $ckStr set strVal [CkDirTree_get_lastErrorXml $this]` | read-only | Provides XML-formatted information about the last called method or property. |
| `LastMethodSuccess` | `boolean 1/0 set boolVal [CkDirTree_get_LastMethodSuccess $this] CkDirTree_put_LastMethodSuccess $this $boolVal` | read/write | Indicates the success or failure of the most recent method call: `1` means success, `0` means failure. |
| `Utf8` | `boolean 1/0 set boolVal [CkDirTree_get_Utf8 $this] CkDirTree_put_Utf8 $this $boolVal` | read/write | When set to `1`, all `string` arguments and return values are interpreted as UTF-8 strings. |
| `VerboseLogging` | `boolean 1/0 set boolVal [CkDirTree_get_VerboseLogging $this] CkDirTree_put_VerboseLogging $this $boolVal` | read/write | If set to `1`, then the contents of LastErrorText (or LastErrorXml, or LastErrorHtml) may contain more verbose information. |
| `Version` | `string # ckStr is a CkString CkDirTree_get_Version $this $ckStr set strVal [CkDirTree_get_version $this]` | read-only | Version of the component/library, such as "10.1.0" |

## Member index

| Member | Kind | Signature |
|---|---|---|
| `BaseDir` | property, read/write | `string # ckStr is a CkString CkDirTree_get_BaseDir $this $ckStr set strVal [CkDirTree_get_baseDir $this] CkDirTree_put_BaseDir $this $strVal` |
| `DoneIterating` | property, read-only | `boolean 1/0 set boolVal [CkDirTree_get_DoneIterating $this]` |
| `FileSize32` | property, read-only | `integer set intVal [CkDirTree_get_FileSize32 $this]` |
| `FileSize64` | property, read-only | `(64-bit integer) set int64Val [CkDirTree_get_FileSize64 $this]` |
| `FileSizeStr` | property, read-only | `string # ckStr is a CkString CkDirTree_get_FileSizeStr $this $ckStr set strVal [CkDirTree_get_fileSizeStr $this]` |
| `FullPath` | property, read-only | `string # ckStr is a CkString CkDirTree_get_FullPath $this $ckStr set strVal [CkDirTree_get_fullPath $this]` |
| `FullUncPath` | property, read-only | `string # ckStr is a CkString CkDirTree_get_FullUncPath $this $ckStr set strVal [CkDirTree_get_fullUncPath $this]` |
| `IsDirectory` | property, read-only | `boolean 1/0 set boolVal [CkDirTree_get_IsDirectory $this]` |
| `Recurse` | property, read/write | `boolean 1/0 set boolVal [CkDirTree_get_Recurse $this] CkDirTree_put_Recurse $this $boolVal` |
| `RelativePath` | property, read-only | `string # ckStr is a CkString CkDirTree_get_RelativePath $this $ckStr set strVal [CkDirTree_get_relativePath $this]` |
| `UncommonOptions` | property, read/write | `string # ckStr is a CkString CkDirTree_get_UncommonOptions $this $ckStr set strVal [CkDirTree_get_uncommonOptions $this] CkDirTree_put_UncommonOptions $this $strVal` |
| `AdvancePosition` | method | `set status [CkDirTree_AdvancePosition $this]` |
| `BeginIterate` | method | `set status [CkDirTree_BeginIterate $this]` |

## Properties

### DirTree.BaseDir

`Chilkat 11.7.0 · tcl · DirTree · BaseDir · property · read/write`

```tcl
string
# ckStr is a CkString

CkDirTree_get_BaseDir $this $ckStr

set strVal [CkDirTree_get_baseDir $this]

CkDirTree_put_BaseDir $this $strVal
```

Specifies the root directory whose contents are traversed. Set this property before calling `BeginIterate`.

The value may be an absolute filesystem path or a relative path. A relative path is resolved from the calling process's current working directory.

**Iteration scope:** The iterator visits the files and subdirectories contained under this directory. The `Recurse` property determines whether nested levels are included.

### DirTree.DoneIterating

`Chilkat 11.7.0 · tcl · DirTree · DoneIterating · property · read-only`

```tcl
boolean 1/0
set boolVal [CkDirTree_get_DoneIterating $this]
```

Indicates whether the traversal has reached its normal end and no current item remains.

This property is especially important because both `BeginIterate` and `AdvancePosition` can return *`0`* for either normal completion or an error:

| Method result | `DoneIterating` | Meaning |
| :--- | :--- | :--- |
| `0` | `1` | The directory was empty, or the last item has been passed. This is normal completion. |
| `0` | `0` | An error occurred. Examine `LastErrorText`. |

### DirTree.FileSize32

`Chilkat 11.7.0 · tcl · DirTree · FileSize32 · property · read-only`

```tcl
integer
set intVal [CkDirTree_get_FileSize32 $this]
```

Returns the size of the current file in bytes as a 32-bit integer. The value is `0` when the current item is a directory.

**Large files:** A 32-bit integer cannot represent all modern file sizes. Use `FileSize64` when the language binding provides it, or `FileSizeStr` when a decimal string is more portable.

### DirTree.FileSize64

`Chilkat 11.7.0 · tcl · DirTree · FileSize64 · property · read-only`

```tcl
(64-bit integer)
set int64Val [CkDirTree_get_FileSize64 $this]
```

Returns the size of the current file in bytes as a 64-bit integer. The value is `0` when the current item is a directory.

This is the preferred numeric size property for files that may exceed the range of `FileSize32`. In bindings that do not expose a 64-bit integer property, use `FileSizeStr`.

### DirTree.FileSizeStr

`Chilkat 11.7.0 · tcl · DirTree · FileSizeStr · property · read-only · since 9.5.0.88`

```tcl
string
# ckStr is a CkString

CkDirTree_get_FileSizeStr $this $ckStr

set strVal [CkDirTree_get_fileSizeStr $this]
```

Returns the size of the current file in bytes as an unsigned decimal string. The value is `0` when the current item is a directory.

This representation is useful for very large files and for language bindings where a 64-bit integer is unavailable or inconvenient. Convert the string to an appropriate arbitrary-precision or 64-bit numeric type only when arithmetic is required.

### DirTree.FullPath

`Chilkat 11.7.0 · tcl · DirTree · FullPath · property · read-only`

```tcl
string
# ckStr is a CkString

CkDirTree_get_FullPath $this $ckStr

set strVal [CkDirTree_get_fullPath $this]
```

Returns the absolute filesystem path of the current file or subdirectory, including the item's name.

The path uses the native path syntax for the operating system. For a path relative to `BaseDir`, use `RelativePath`.

### DirTree.FullUncPath

`Chilkat 11.7.0 · tcl · DirTree · FullUncPath · property · read-only`

```tcl
string
# ckStr is a CkString

CkDirTree_get_FullUncPath $this $ckStr

set strVal [CkDirTree_get_fullUncPath $this]
```

Returns the current item's Windows extended-length absolute path. For example, a local path may be returned as `\\?\C:\data\reports\file.txt`; a network path may use the `\\?\UNC\server\share\...` form.

**Windows path form:** The `\\?\` prefix asks Windows to use extended-length path parsing and is useful when working with paths that may exceed legacy path-length limits. Use `FullPath` when an ordinary native absolute path is preferred.

### DirTree.IsDirectory

`Chilkat 11.7.0 · tcl · DirTree · IsDirectory · property · read-only`

```tcl
boolean 1/0
set boolVal [CkDirTree_get_IsDirectory $this]
```

Returns *`1`* when the current item is a subdirectory and *`0`* when it is a file.

Check this property before using a file-size property. Directory items report a size of `0`.

### DirTree.Recurse

`Chilkat 11.7.0 · tcl · DirTree · Recurse · property · read/write`

```tcl
boolean 1/0
set boolVal [CkDirTree_get_Recurse $this]

CkDirTree_put_Recurse $this $boolVal
```

Controls whether traversal descends into nested subdirectories.

| `1` | Visit files and directories throughout the complete tree rooted at `BaseDir`. |
| :--- | --- |
| `0` | Visit only the immediate contents of `BaseDir`. |

The default value is *`1`*. Set this property before calling `BeginIterate`.

### DirTree.RelativePath

`Chilkat 11.7.0 · tcl · DirTree · RelativePath · property · read-only`

```tcl
string
# ckStr is a CkString

CkDirTree_get_RelativePath $this $ckStr

set strVal [CkDirTree_get_relativePath $this]
```

Returns the path of the current file or subdirectory relative to `BaseDir`, including the item's name.

For example, if `BaseDir` is `C:\data` and the current item is `C:\data\images\logo.png`, this property returns `images\logo.png` on Windows. Path separators follow the operating system's native convention.

### DirTree.UncommonOptions

`Chilkat 11.7.0 · tcl · DirTree · UncommonOptions · property · read/write · since 11.1.0`

```tcl
string
# ckStr is a CkString

CkDirTree_get_UncommonOptions $this $ckStr

set strVal [CkDirTree_get_uncommonOptions $this]

CkDirTree_put_UncommonOptions $this $strVal
```

Provides a comma-separated list of specialized compatibility options. The default is the empty string, and applications should normally leave it unchanged.

| Keyword | Effect |
| :--- | :--- |
| `Q_EncodePaths` | Returns path-valued output properties in Chilkat's Q-encoded representation. Introduced in Chilkat v11.1.0. This changes only the returned string representation; it does not change which filesystem items are traversed. |

## Methods

### DirTree.AdvancePosition

`Chilkat 11.7.0 · tcl · DirTree · AdvancePosition · method`

```tcl
set status [CkDirTree_AdvancePosition $this]
```

Advances the traversal from the current item to the next file or subdirectory.

If the method returns *`1`*, the current-item properties—such as `FullPath`, `RelativePath`, `IsDirectory`, and the file-size properties—describe the newly selected item.

| Return value | `DoneIterating` | Meaning |
| :--- | :--- | :--- |
| `1` | `0` | The iterator advanced successfully and a current item is available. |
| `0` | `1` | The last item has been passed; traversal completed normally. |
| `0` | `0` | An error occurred. Examine `LastErrorText`. |

Returns 1 for success, 0 for failure.

### DirTree.BeginIterate

`Chilkat 11.7.0 · tcl · DirTree · BeginIterate · method`

```tcl
set status [CkDirTree_BeginIterate $this]
```

Initializes a new traversal using the current `BaseDir` and `Recurse` settings.

If the method returns *`1`*, the iterator is positioned at the first file or subdirectory, and the current-item properties can be read immediately. Continue by processing that item and then calling `AdvancePosition`.

| Return value | `DoneIterating` | Meaning |
| :--- | :--- | :--- |
| `1` | `0` | The first item is available. |
| `0` | `1` | The directory contains no items in the selected traversal scope. This is not an error. |
| `0` | `0` | Initialization failed. Examine `LastErrorText`. |

**Property lifetime:** Treat the current-item properties as valid only while the iterator is positioned on an item—that is, after a successful `BeginIterate` or `AdvancePosition`.

Returns 1 for success, 0 for failure.

