first version, plays videos...
Stefan Schuermans authored 13 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 += '/';
27) }
28)
29) /**
30) * @brief get list of entries in directory
31) * @param[in] type type of directory entries to return
32) * @param[out] entries list of directory entries
33) */
34) void Directory::getEntries(Type type, std::list<std::string> &entries) const
35) {
36) entries.clear();
37)
38) if (m_path.empty())
39) return;
40) DIR *dir = opendir(m_path.c_str());
41) if (!dir)
42) return;
43)
44) struct dirent *dirent;
45) while ((dirent = readdir(dir))) {
46) if (strcmp(dirent->d_name, ".") && strcmp(dirent->d_name, "..") ) {
47)
48) struct stat s;
49) if (stat((m_path + dirent->d_name).c_str(), &s))
50) continue; // cannot stat -> silently ignore
51)
52) bool ok = false;
53) switch (type) {
54) case TypeSubdir: ok = S_ISDIR(s.st_mode); break;
55) case TypeFile: ok = S_ISREG(s.st_mode); break;
56) }
57) if (ok)
58) entries.push_back(dirent->d_name);
59)
60) } // if ! "." && ! ".."
61) } // while dirent
62)
63) closedir(dir);
64)
65) entries.sort();
66) }
67)
68) /**
69) * @brief get subdirectory
70) * @param[in] name of subdirectory
71) * @return subdirectory object
72) */
73) Directory Directory::getSubdir(const std::string &name) const
74) {
75) return Directory(m_path + name);
76) }
77)
|