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
)