mimic std directory_iterator and directory_entry
This commit is contained in:
parent
7117cc03b0
commit
0b63ca51f7
@ -24,7 +24,7 @@
|
|||||||
// http://www.boost.org/doc/libs/1_58_0/libs/filesystem/doc/index.htm ---
|
// http://www.boost.org/doc/libs/1_58_0/libs/filesystem/doc/index.htm ---
|
||||||
// http://www.boost.org/doc/libs/1_34_0/libs/filesystem/doc/index.htm
|
// http://www.boost.org/doc/libs/1_34_0/libs/filesystem/doc/index.htm
|
||||||
// http://www.boost.org/doc/libs/1_58_0/boost/filesystem.hpp
|
// http://www.boost.org/doc/libs/1_58_0/boost/filesystem.hpp
|
||||||
|
// https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x --- Table 1.4. g++ C++ Technical Specifications Implementation Status
|
||||||
|
|
||||||
#ifndef NANA_FILESYSTEM_HPP
|
#ifndef NANA_FILESYSTEM_HPP
|
||||||
#define NANA_FILESYSTEM_HPP
|
#define NANA_FILESYSTEM_HPP
|
||||||
@ -49,16 +49,18 @@ namespace nana
|
|||||||
{
|
{
|
||||||
namespace filesystem
|
namespace filesystem
|
||||||
{
|
{
|
||||||
struct fileinfo
|
using path = nana::string;
|
||||||
{
|
|
||||||
fileinfo();
|
|
||||||
#ifdef NANA_WINDOWS
|
|
||||||
fileinfo(const WIN32_FIND_DATA& wfd);
|
|
||||||
#elif NANA_LINUX
|
|
||||||
fileinfo(const nana::string& filename, const struct stat &);
|
|
||||||
#endif
|
|
||||||
nana::string name;
|
|
||||||
|
|
||||||
|
struct directory_entry
|
||||||
|
{
|
||||||
|
directory_entry();
|
||||||
|
directory_entry(const nana::string& filename, bool is_directory, unsigned long size)
|
||||||
|
:name{filename}, size{size}, directory{is_directory}
|
||||||
|
{}
|
||||||
|
const path& path() const noexcept{return name;}
|
||||||
|
//operator const path&() const noexcept;
|
||||||
|
|
||||||
|
nana::string name;
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
bool directory;
|
bool directory;
|
||||||
};
|
};
|
||||||
@ -66,10 +68,10 @@ namespace filesystem
|
|||||||
|
|
||||||
/// an iterator for a sequence of directory_entry elements representing the files in a directory, not an recursive_directory_iterator
|
/// an iterator for a sequence of directory_entry elements representing the files in a directory, not an recursive_directory_iterator
|
||||||
//template<typename FileInfo>
|
//template<typename FileInfo>
|
||||||
class directory_iterator :public std::iterator<std::input_iterator_tag, fileinfo>
|
class directory_iterator :public std::iterator<std::input_iterator_tag, directory_entry>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef fileinfo value_type;
|
using value_type = directory_entry ;
|
||||||
|
|
||||||
directory_iterator():end_(true), handle_(nullptr){}
|
directory_iterator():end_(true), handle_(nullptr){}
|
||||||
|
|
||||||
@ -135,7 +137,11 @@ namespace filesystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
value_ = value_type(wfd_);
|
|
||||||
|
value_ = value_type(wfd_.cFileName,
|
||||||
|
(FILE_ATTRIBUTE_DIRECTORY & wfd_.dwFileAttributes) == FILE_ATTRIBUTE_DIRECTORY,
|
||||||
|
wfd_.nFileSizeLow);
|
||||||
|
|
||||||
#elif defined(NANA_LINUX)
|
#elif defined(NANA_LINUX)
|
||||||
path_ = nana::charset(file_path);
|
path_ = nana::charset(file_path);
|
||||||
if(path_.size() && (path_[path_.size() - 1] != '/'))
|
if(path_.size() && (path_[path_.size() - 1] != '/'))
|
||||||
@ -160,7 +166,7 @@ namespace filesystem
|
|||||||
struct stat fst;
|
struct stat fst;
|
||||||
if(stat((path_ + dnt->d_name).c_str(), &fst) == 0)
|
if(stat((path_ + dnt->d_name).c_str(), &fst) == 0)
|
||||||
{
|
{
|
||||||
value_ = value_type(nana::charset(dnt->d_name), fst);
|
value_ = value_type(nana::charset(dnt->d_name), 0 != S_ISDIR(fst.st_mode), fst.st_size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -194,7 +200,9 @@ namespace filesystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
value_ = value_type(wfd_);
|
value_ = value_type(wfd_.cFileName,
|
||||||
|
(FILE_ATTRIBUTE_DIRECTORY & wfd_.dwFileAttributes) == FILE_ATTRIBUTE_DIRECTORY,
|
||||||
|
wfd_.nFileSizeLow);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
end_ = true;
|
end_ = true;
|
||||||
@ -213,7 +221,9 @@ namespace filesystem
|
|||||||
}
|
}
|
||||||
struct stat fst;
|
struct stat fst;
|
||||||
if(stat((path_ + "/" + dnt->d_name).c_str(), &fst) == 0)
|
if(stat((path_ + "/" + dnt->d_name).c_str(), &fst) == 0)
|
||||||
value_ = value_type(nana::charset(dnt->d_name), fst);
|
value_ = value_type(wfd_.cFileName,
|
||||||
|
(FILE_ATTRIBUTE_DIRECTORY & wfd_.dwFileAttributes) == FILE_ATTRIBUTE_DIRECTORY,
|
||||||
|
wfd_.nFileSizeLow);
|
||||||
else
|
else
|
||||||
value_.name = nana::charset(dnt->d_name);
|
value_.name = nana::charset(dnt->d_name);
|
||||||
}
|
}
|
||||||
@ -265,7 +275,7 @@ namespace filesystem
|
|||||||
return !x.equal(y);
|
return !x.equal(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
//using directory_iterator = directory_iterator<fileinfo> ;
|
//using directory_iterator = directory_iterator<directory_entry> ;
|
||||||
}//end namespace filesystem
|
}//end namespace filesystem
|
||||||
}//end namespace nana
|
}//end namespace nana
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user