Mercurial > code
comparison C++/modules/Directory/Directory.cpp @ 341:83ef77841ff1
Directory: dots are not listed by default
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 30 Mar 2015 09:21:01 +0200 |
parents | 0b576ee64d45 |
children | 8846b46fc435 |
comparison
equal
deleted
inserted
replaced
340:1dc2e1adf247 | 341:83ef77841ff1 |
---|---|
68 | 68 |
69 if (handle == nullptr) | 69 if (handle == nullptr) |
70 throw std::runtime_error(systemError()); | 70 throw std::runtime_error(systemError()); |
71 | 71 |
72 do { | 72 do { |
73 Entry entry; | 73 DirectoryEntry entry; |
74 | 74 |
75 entry.name = fdata.cFileName; | 75 entry.name = fdata.cFileName; |
76 if ((flags & Directory::NotDot) && entry.name == ".") | 76 if (entry.name == "." && !(flags & Directory::Dot)) |
77 continue; | 77 continue; |
78 if ((flags & Directory::NotDotDot) && entry.name == "..") | 78 if (entry.name == ".." && !(flags & Directory::DotDot)) |
79 continue; | 79 continue; |
80 | 80 |
81 switch (fdata.dwFileAttributes) { | 81 switch (fdata.dwFileAttributes) { |
82 case FILE_ATTRIBUTE_DIRECTORY: | 82 case FILE_ATTRIBUTE_DIRECTORY: |
83 entry.type = Dir; | 83 entry.type = DirectoryEntry::Dir; |
84 break; | 84 break; |
85 case FILE_ATTRIBUTE_NORMAL: | 85 case FILE_ATTRIBUTE_NORMAL: |
86 entry.type = File; | 86 entry.type = DirectoryEntry::File; |
87 break; | 87 break; |
88 case FILE_ATTRIBUTE_REPARSE_POINT: | 88 case FILE_ATTRIBUTE_REPARSE_POINT: |
89 entry.type = Link; | 89 entry.type = DirectoryEntry::Link; |
90 break; | 90 break; |
91 default: | 91 default: |
92 break; | 92 break; |
93 } | 93 } |
94 | 94 |
110 | 110 |
111 while ((ent = readdir(dp)) != nullptr) { | 111 while ((ent = readdir(dp)) != nullptr) { |
112 Entry entry; | 112 Entry entry; |
113 | 113 |
114 entry.name = ent->d_name; | 114 entry.name = ent->d_name; |
115 if ((flags & Directory::NotDot) && entry.name == ".") | 115 if (entry.name == "." && !(flags & Directory::Dot)) |
116 continue; | 116 continue; |
117 if ((flags & Directory::NotDotDot) && entry.name == "..") | 117 if (entry.name == ".." && !(flags & Directory::DotDot)) |
118 continue; | 118 continue; |
119 | 119 |
120 switch (ent->d_type) { | 120 switch (ent->d_type) { |
121 case DT_DIR: | 121 case DT_DIR: |
122 entry.type = Dir; | 122 entry.type = DirectoryEntry::Dir; |
123 break; | 123 break; |
124 case DT_REG: | 124 case DT_REG: |
125 entry.type = File; | 125 entry.type = DirectoryEntry::File; |
126 break; | 126 break; |
127 case DT_LNK: | 127 case DT_LNK: |
128 entry.type = Link; | 128 entry.type = DirectoryEntry::Link; |
129 break; | 129 break; |
130 default: | 130 default: |
131 break; | 131 break; |
132 } | 132 } |
133 | 133 |
137 closedir(dp); | 137 closedir(dp); |
138 } | 138 } |
139 | 139 |
140 #endif | 140 #endif |
141 | 141 |
142 Directory::Entry::Entry() | 142 bool operator==(const DirectoryEntry &e1, const DirectoryEntry &e2) |
143 : type(Unknown) | |
144 { | |
145 } | |
146 | |
147 bool operator==(const Directory::Entry &e1, const Directory::Entry &e2) | |
148 { | 143 { |
149 return e1.name == e2.name && e1.type == e2.type; | 144 return e1.name == e2.name && e1.type == e2.type; |
150 } | 145 } |
151 | 146 |
152 Directory::Directory() | 147 Directory::Directory() |