1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
* @class vtkGlobFileNames
* @brief find files that match a wildcard pattern
*
* vtkGlobFileNames is a utility for finding files and directories
* that match a given wildcard pattern. Allowed wildcards are
* *, ?, [...], [!...]. The "*" wildcard matches any substring,
* the "?" matches any single character, the [...] matches any one of
* the enclosed characters, e.g. [abc] will match one of a, b, or c,
* while [0-9] will match any digit, and [!...] will match any single
* character except for the ones within the brackets. Special
* treatment is given to "/" (or "\" on Windows) because these are
* path separators. These are never matched by a wildcard, they are
* only matched with another file separator.
* @warning
* This function performs case-sensitive matches on UNIX and
* case-insensitive matches on Windows.
* @sa
* vtkDirectory
*/
#ifndef vtkGlobFileNames_h
#define vtkGlobFileNames_h
#include "vtkIOCoreModule.h" // For export macro
#include "vtkObject.h"
VTK_ABI_NAMESPACE_BEGIN
class vtkStringArray;
class VTKIOCORE_EXPORT vtkGlobFileNames : public vtkObject
{
public:
///@{
/**
* Return the class name as a string.
*/
vtkTypeMacro(vtkGlobFileNames, vtkObject);
///@}
/**
* Create a new vtkGlobFileNames object.
*/
static vtkGlobFileNames* New();
/**
* Print directory to stream.
*/
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Reset the glob by clearing the list of output filenames.
*/
void Reset();
///@{
/**
* Set the directory in which to perform the glob. If this is
* not set, then the current directory will be used. Also, if
* you use a glob pattern that contains absolute path (one that
* starts with "/" or a drive letter) then that absolute path
* will be used and Directory will be ignored.
*/
vtkSetFilePathMacro(Directory);
vtkGetFilePathMacro(Directory);
///@}
/**
* Search for all files that match the given expression,
* sort them, and add them to the output. This method can
* be called repeatedly to add files matching additional patterns.
* Returns 1 if successful, otherwise returns zero.
*/
int AddFileNames(VTK_FILEPATH const char* pattern);
///@{
/**
* Recurse into subdirectories.
*/
vtkSetMacro(Recurse, vtkTypeBool);
vtkBooleanMacro(Recurse, vtkTypeBool);
vtkGetMacro(Recurse, vtkTypeBool);
///@}
/**
* Return the number of files found.
*/
int GetNumberOfFileNames();
/**
* Return the file at the given index, the indexing is 0 based.
*/
VTK_FILEPATH const char* GetNthFileName(int index);
///@{
/**
* Get an array that contains all the file names.
*/
vtkGetObjectMacro(FileNames, vtkStringArray);
///@}
protected:
///@{
/**
* Set the wildcard pattern.
*/
vtkSetFilePathMacro(Pattern);
vtkGetFilePathMacro(Pattern);
///@}
vtkGlobFileNames();
~vtkGlobFileNames() override;
private:
char* Directory; // Directory for search.
char* Pattern; // Wildcard pattern
vtkTypeBool Recurse; // Recurse into subdirectories
vtkStringArray* FileNames; // VTK array of files
vtkGlobFileNames(const vtkGlobFileNames&) = delete;
void operator=(const vtkGlobFileNames&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif
|