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)
|