aGrUM  0.16.0
utils_dir.cpp
Go to the documentation of this file.
1 
30 #include <agrum/core/utils_dir.h>
31 
32 namespace gum {
33 
34  // Return true if \a directory is a valid directory, false otherwise.
35  bool Directory::isDir(const std::string& directory) {
36  return Directory(directory).isValid();
37  }
38 
39  // Contructor
40  Directory::Directory() : m_dirPtr(nullptr) { GUM_CONSTRUCTOR(Directory); }
41 
42  // Contructor
43  Directory::Directory(const std::string& directory) : m_dirName(directory) {
44  GUM_CONSTRUCTOR(Directory);
45  m_dirPtr = opendir(m_dirName.c_str());
46  }
47 
48  // Contructor
50  GUM_CONSTRUCTOR(Directory);
51  m_dirPtr = opendir(m_dirName.c_str());
52  }
53 
54  // Destructor
56  GUM_DESTRUCTOR(Directory);
57 
58  if (m_dirPtr != nullptr) closedir(m_dirPtr);
59  }
60 
61  // Return true if directory has been opened, false otherwise.
62  bool Directory::isValid() const { return m_dirPtr != nullptr; }
63 
64  // Return directory content.
65  std::vector< std::string > Directory::entries() const {
66  std::vector< std::string > result;
67 
68  if (!isValid()) return result;
69 
70  rewinddir(m_dirPtr);
71 
72  dirent* entry;
73 
74  while ((entry = readdir(m_dirPtr)))
75  result.push_back(std::string(entry->d_name));
76 
77  return result;
78  }
79 
80  // Return directory parent.
82  if (!isValid()) return Directory();
83 
84  return Directory(m_dirName + "../");
85  }
86 
87  // Return directory path.
88  std::string Directory::path() const { return m_dirName; }
89 
90  // Return directory absolute path.
91  std::string Directory::absolutePath() const {
92  std::string result;
93 
94  if (!isValid()) return result;
95 
96  char oldWD[255];
97 
98  if (getcwd(oldWD, 255) == nullptr) return result;
99 
100  if (chdir(m_dirName.c_str()) != 0) return result;
101 
102  char absPath[255];
103 
104  if (getcwd(absPath, 254) != nullptr) result = std::string(absPath) + '/';
105 
106  if (chdir(oldWD) != 0)
107  std::cerr << "Warning : Could not go to previous working directory. ("
108  << __FILE__ << ":" << __LINE__ << ")" << std::endl;
109 
110  return result;
111  }
112 
114  if (m_dirPtr != nullptr) closedir(m_dirPtr);
115 
116  m_dirName = d.m_dirName;
117 
118  m_dirPtr = opendir(m_dirName.c_str());
119 
120  return *this;
121  }
122 
123 } // namespace gum
Cross-platform directory utility.
Definition: utils_dir.h:62
std::string m_dirName
The directory path.
Definition: utils_dir.h:134
Directory()
Contructor.
Definition: utils_dir.cpp:40
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Definition: agrum.h:25
DIR * m_dirPtr
A pointer towards the Directory stream.
Definition: utils_dir.h:137
bool isValid() const
Returns true if directory has been opened, false otherwise.
Definition: utils_dir.cpp:62
Directory & operator=(const Directory &d)
Copy operator.
Definition: utils_dir.cpp:113
~Directory()
Destructor.
Definition: utils_dir.cpp:55
std::string absolutePath() const
Returns directory absolute path.
Definition: utils_dir.cpp:91
std::vector< std::string > entries() const
Return directory content.
Definition: utils_dir.cpp:65
Directory parent() const
Returns directory parent.
Definition: utils_dir.cpp:81
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
static bool isDir(const std::string &path)
&brief Return true if directory is a valid directory, false otherwise.
Definition: utils_dir.cpp:35
std::string path() const
Returns directory path.
Definition: utils_dir.cpp:88