1 /** 2 * 3 * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU) 4 * info_at_agrum_dot_org 5 * 6 * This library is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public License 17 * along with this library. If not, see <http://www.gnu.org/licenses/>. 18 * 19 */ 20 21 22 /** 23 * @file 24 * @brief Contains usefull methods to work with files and directories. 25 * 26 * @author Vincent RENAUDINEAU and Pierre-Henri WUILLEMIN(_at_LIP6) 27 */ 28 29 #ifndef GUM_DIR_UTILS_H 30 #define GUM_DIR_UTILS_H 31 32 #include <cstdio> 33 #include <cstdlib> 34 #include <iostream> 35 #include <string> 36 #include <vector> 37 38 #include <agrum/agrum.h> 39 40 #ifdef HAVE_UNISTD_H 41 # include <unistd.h> 42 #else 43 # include <agrum/tools/core/mvsc/unistd.h> 44 #endif 45 46 #ifdef HAVE_DIRENT_H 47 # include <dirent.h> 48 #else 49 # include <agrum/tools/core/mvsc/dirent.h> 50 #endif 51 52 53 namespace gum { 54 55 /** 56 * @class Directory 57 * @headerfile utils_dir.h <agrum/tools/core/utils_dir.h> 58 * @brief Cross-platform directory utility. 59 * @ingroup utilities_group 60 */ 61 class Directory { 62 public: 63 /** 64 * &brief Return true if \a directory is a valid directory, false 65 * otherwise. 66 * @param path The path to test. 67 * &return Return true if \a directory is a valid directory, false 68 * otherwise. 69 */ 70 static bool isDir(const std::string& path); 71 72 /** 73 * @brief Contructor. 74 */ 75 Directory(); 76 77 /** 78 * @brief Contructor. 79 * @param directory The path to the directory. 80 */ 81 Directory(const std::string& directory); 82 83 /** 84 * @brief Copy contructor. 85 * @param dir The gum::Directory to copy. 86 */ 87 Directory(const Directory& dir); 88 89 /** 90 * @brief Destructor. 91 */ 92 ~Directory(); 93 94 /** 95 * @brief Returns true if directory has been opened, false otherwise. 96 * @return Returns true if directory has been opened, false otherwise. 97 */ 98 bool isValid() const; 99 100 /** 101 * @brief Return directory content. 102 * @return Return directory content. 103 */ 104 std::vector< std::string > entries() const; 105 106 /** 107 * @brief Returns directory parent. 108 * @return Returns directory parent. 109 */ 110 Directory parent() const; 111 112 /** 113 * @brief Returns directory path. 114 * @return Returns directory path. 115 */ 116 std::string path() const; 117 118 /** 119 * @brief Returns directory absolute path. 120 * @return Returns directory absolute path. 121 */ 122 std::string absolutePath() const; 123 124 /** 125 * @brief Copy operator. 126 * @param d The gum::Directory to copy. 127 * @return Returns this gum::Directory. 128 */ 129 Directory& operator=(const Directory& d); 130 131 private: 132 /// The directory path. 133 std::string m_dirName; 134 135 /// A pointer towards the Directory stream 136 mutable DIR* m_dirPtr; 137 138 }; // END CLASS DIRECTORY 139 140 } // namespace gum 141 142 #endif // GUM_DIR_UTILS_H 143