mirror of
https://git.mirrors.martin98.com/https://github.com/gulrak/filesystem
synced 2025-06-04 11:13:58 +08:00
refs #12, added more tests to recursive directory iterator, fixed additional issue with pop().
This commit is contained in:
parent
cce8c431c2
commit
5ea334899a
@ -4885,10 +4885,11 @@ GHC_INLINE void recursive_directory_iterator::pop(std::error_code& ec)
|
|||||||
*this = recursive_directory_iterator();
|
*this = recursive_directory_iterator();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
while (depth() && _impl->_dir_iter_stack.top() == directory_iterator()) {
|
do {
|
||||||
_impl->_dir_iter_stack.pop();
|
_impl->_dir_iter_stack.pop();
|
||||||
_impl->_dir_iter_stack.top().increment(ec);
|
_impl->_dir_iter_stack.top().increment(ec);
|
||||||
}
|
}
|
||||||
|
while (depth() && _impl->_dir_iter_stack.top() == directory_iterator());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <map>
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
@ -1205,29 +1206,73 @@ TEST_CASE("30.10.14 class recursive_directory_iterator", "[filesystem][recursive
|
|||||||
fs::recursive_directory_iterator rd5;
|
fs::recursive_directory_iterator rd5;
|
||||||
rd5 = rd4;
|
rd5 = rd4;
|
||||||
}
|
}
|
||||||
/*
|
{
|
||||||
if(1) {
|
TemporaryDirectory t(TempOpt::change_path);
|
||||||
fs::path d = "..";
|
generateFile("a");
|
||||||
int maxDepth = 2;
|
fs::create_directory("d1");
|
||||||
fs::recursive_directory_iterator dit(d);
|
fs::create_directory("d1/d2");
|
||||||
std::cout << d << std::endl;
|
generateFile("d1/b");
|
||||||
for(auto & f : dit) {
|
generateFile("d1/c");
|
||||||
#if 1
|
generateFile("d1/d2/d");
|
||||||
if(dit.depth()<=maxDepth) {
|
generateFile("e");
|
||||||
std::cout << dit.depth() << ": " << f.path() << std::endl;
|
auto iter = fs::recursive_directory_iterator(".");
|
||||||
|
std::multimap<std::string, int> result;
|
||||||
|
while(iter != fs::recursive_directory_iterator()) {
|
||||||
|
result.insert(std::make_pair(iter->path().string(), iter.depth()));
|
||||||
|
++iter;
|
||||||
|
}
|
||||||
|
std::stringstream os;
|
||||||
|
for(auto p : result) {
|
||||||
|
os << "[" << p.first << "," << p.second << "],";
|
||||||
|
}
|
||||||
|
CHECK(os.str() == "[./a,0],[./d1,0],[./d1/b,1],[./d1/c,1],[./d1/d2,1],[./d1/d2/d,2],[./e,0],");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
TemporaryDirectory t(TempOpt::change_path);
|
||||||
|
generateFile("a");
|
||||||
|
fs::create_directory("d1");
|
||||||
|
fs::create_directory("d1/d2");
|
||||||
|
generateFile("d1/d2/b");
|
||||||
|
generateFile("e");
|
||||||
|
auto iter = fs::recursive_directory_iterator(".");
|
||||||
|
std::multimap<std::string, int> result;
|
||||||
|
while(iter != fs::recursive_directory_iterator()) {
|
||||||
|
result.insert(std::make_pair(iter->path().string(), iter.depth()));
|
||||||
|
if(iter->path() == "./d1/d2") {
|
||||||
|
iter.disable_recursion_pending();
|
||||||
|
}
|
||||||
|
++iter;
|
||||||
|
}
|
||||||
|
std::stringstream os;
|
||||||
|
for(auto p : result) {
|
||||||
|
os << "[" << p.first << "," << p.second << "],";
|
||||||
|
}
|
||||||
|
CHECK(os.str() == "[./a,0],[./d1,0],[./d1/d2,1],[./e,0],");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
TemporaryDirectory t(TempOpt::change_path);
|
||||||
|
generateFile("a");
|
||||||
|
fs::create_directory("d1");
|
||||||
|
fs::create_directory("d1/d2");
|
||||||
|
generateFile("d1/d2/b");
|
||||||
|
generateFile("e");
|
||||||
|
auto iter = fs::recursive_directory_iterator(".");
|
||||||
|
std::multimap<std::string, int> result;
|
||||||
|
while(iter != fs::recursive_directory_iterator()) {
|
||||||
|
result.insert(std::make_pair(iter->path().string(), iter.depth()));
|
||||||
|
if(iter->path() == "./d1/d2") {
|
||||||
|
iter.pop();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dit.pop();
|
++iter;
|
||||||
}
|
|
||||||
#else
|
|
||||||
std::cout << dit.depth() << ": " << f.path() << std::endl;
|
|
||||||
if(dit.depth()>maxDepth) {
|
|
||||||
dit.disable_recursion_pending();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
std::stringstream os;
|
||||||
|
for(auto p : result) {
|
||||||
|
os << "[" << p.first << "," << p.second << "],";
|
||||||
|
}
|
||||||
|
CHECK(os.str() == "[./a,0],[./d1,0],[./d1/d2,1],[./e,0],");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("30.10.15.1 absolute", "[filesystem][operations][fs.op.absolute]")
|
TEST_CASE("30.10.15.1 absolute", "[filesystem][operations][fs.op.absolute]")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user