/*! * \file include/utils/Folder.h * \brief Recursive file-system walking utilities * * \author xythobuz */ #ifndef _UTILS_FOLDER_H_ #define _UTILS_FOLDER_H_ #include #include #include #include class File { public: explicit File(std::string file); std::string& getName() { return name; } std::string& getPath() { return path; } private: std::string name; std::string path; }; class Folder { public: Folder(std::string folder, bool listDotFiles = false); std::string& getName() { return name; } std::string& getPath() { return path; } unsigned long fileCount(); File& getFile(unsigned long i); unsigned long folderCount(); Folder& getFolder(unsigned long i); Folder getParent(); void executeRemoveFiles(std::function func); void findFilesEndingWith(std::vector& found, std::string end, bool casesensitive = false); // Accessing a folder recursively // This treats all files in all subfolders as if they were in this folder unsigned long countRecursiveFiles(); void executeRemoveRecursiveFiles(std::function func); std::string getRecursiveFileName(unsigned long i); File& getRecursiveFile(unsigned long i); void findRecursiveFilesEndingWith(std::vector& found, std::string end, bool casesensitive = false); private: void createFolderItems(); int readFolderItems(std::vector& foundFiles, std::vector& foundFolders); std::string name; //!< Only last part of path std::string path; //!< Full path, with name and '/' at end bool hasListed; bool listDot; std::vector files; std::vector folders; }; #endif