9eeb24a34ba95c7d467826589fd5bd2459bcf0c3
Stefan Schuermans File + Directory for Windows

Stefan Schuermans authored 7 years ago

1) /* Blinker
Stefan Schuermans update copyright header

Stefan Schuermans authored 5 years ago

2)    Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans File + Directory for Windows

Stefan Schuermans authored 7 years ago

3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #include <dirent.h>
7) #include <string>
8) #include <string.h>
9) #include <sys/stat.h>
10) #include <sys/types.h>
11) #include <unistd.h>
12) 
13) #include "Directory.h"
14) #include "File.h"
15) 
16) namespace Blinker {
17) 
18) /**
19)  * @brief constructor from path
20)  * @param[in] path path to directory
21)  */
22) Directory::Directory(const std::string &path):
23)   File(path)
24) {
25)   if (m_path.empty() || m_path.at(m_path.length() - 1) != '\\'
26)                      || m_path.at(m_path.length() - 1) != '/')
27)     m_path += '\\';
28) }
29) 
30) /**
31)  * @brief get list of entries in directory
32)  * @param[in] type type of directory entries to return
33)  * @param[out] entries list of directory entries
34)  */
35) void Directory::getEntries(Type type, std::list<std::string> &entries) const
36) {
37)   entries.clear();
38) 
39)   if (m_path.empty())
40)     return;
41)   DIR *dir = opendir(m_path.c_str());
42)   if (!dir)
43)     return;
44) 
45)   struct dirent *dirent;
46)   while ((dirent = readdir(dir))) {
47)     if (strcmp(dirent->d_name, ".") && strcmp(dirent->d_name, "..") ) {
48) 
49)       struct stat s;
50)       if (stat((m_path + dirent->d_name).c_str(), &s))
51)         continue; // cannot stat -> silently ignore
52) 
53)       bool ok = false;
54)       switch (type) {
55)         case TypeSubdir: ok = S_ISDIR(s.st_mode); break;
56)         case TypeFile:   ok = S_ISREG(s.st_mode); break;
57)       }
58)       if (ok)
59)         entries.push_back(dirent->d_name);
60) 
61)     } // if ! "." && ! ".."
62)   } // while dirent
63) 
64)   closedir(dir);
65) 
66)   entries.sort();
67) }
68) 
69) /**
70)  * @brief get subdirectory
71)  * @param[in] name of subdirectory
72)  * @return subdirectory object
73)  */
74) Directory Directory::getSubdir(const std::string &name) const
75) {
76)   return Directory(m_path + name);
77) }
78) 
Stefan Schuermans implement common sound dir,...

Stefan Schuermans authored 5 years ago

79) /**
80)  * @brief get parent directory
81)  * @return parent directory object
82)  */
83) Directory Directory::getParent() const
84) {
85)   return Directory(m_path + "..");
86) }
87)