Iterates files and directories inside a given path without allocating any memory. More...
#include <FileSystemIterator.h>
Classes | |
| struct | Entry |
| Contains information on a file or directory. More... | |
| struct | FolderState |
| Holds state of a folder when recursing into it to list its files. More... | |
| struct | Options |
| Options when iterating (recursive and other options) More... | |
Public Types | |
| enum class | Type { Directory , File } |
| Entry type (File or Directory) More... | |
Public Member Functions | |
| ~FileSystemIterator () | |
| Destroys the FileSystemIterator object. | |
| const Entry & | get () const |
| Get current Entry being iterated. | |
| Result | checkErrors () |
| Check if any error happened during iteration. | |
| Result | init (StringSpan directory, Span< FolderState > recursiveEntries) |
| Initializes the iterator on a given directory. | |
| Result | enumerateNext () |
| Returned string is only valid until next enumerateNext call and/or another init call. | |
| Result | recurseSubdirectory () |
Recurse into current item (assuming Entry::isDirectory == true) | |
Public Attributes | |
| Options | options |
| Options to control recursive behaviour and other options. | |
Iterates files and directories inside a given path without allocating any memory.
FileSystemIterator uses an iterator pattern to enumerate files instead of a callback. This allows avoiding blocking on enumeration of very large directories and also the allocation of a huge number of strings to hold all filenames. When configuring an iteration, the caller can ask for a fully recursive enumeration or manually call SC::FileSystemIterator::recurseSubdirectory when the current SC::FileSystemIterator::Entry item (obtained with SC::FileSystemIterator::get) matches a directory of interest. The maximum number of nested recursion levels that will be allowed depends on the size of the FileSystemIterator::FolderState span (can be a static array) passed in during init by the caller.
Example of recursive iteration of a directory:
If only some directories should be recursed, manual recursion can help speeding up directory iteration:
|
strong |
Entry type (File or Directory)
| SC::FileSystemIterator::~FileSystemIterator | ( | ) |
Destroys the FileSystemIterator object.
|
inline |
Check if any error happened during iteration.
| Result SC::FileSystemIterator::enumerateNext | ( | ) |
Returned string is only valid until next enumerateNext call and/or another init call.
Moves iterator to next file
|
inline |
Get current Entry being iterated.
| Result SC::FileSystemIterator::init | ( | StringSpan | directory, |
| Span< FolderState > | recursiveEntries ) |
Initializes the iterator on a given directory.
| directory | Directory to iterate |
| recursiveEntries | User supplied buffer for the stack used during folder recursion (must be >= 1 elements) |
| Result SC::FileSystemIterator::recurseSubdirectory | ( | ) |
Recurse into current item (assuming Entry::isDirectory == true)