17#define WIN32_LEAN_AND_MEAN
27#include "filesystem.hpp"
29namespace fs = ghc::filesystem;
45 p->entry = de.
p->entry;
52 p = std::make_unique<Private>();
53 p->entry = de.
p->entry;
73 return p->entry.is_directory();
78 return p->entry.is_regular_file();
83 return p->entry.is_symlink();
88 return p->entry.path().string();
97 fs::directory_iterator
it;
114 p->current = it.
p->current;
123 p->current = it.
p->current;
130 std::exchange(
p->it,it.p->it);
131 std::exchange(
p->ec,it.p->ec);
132 std::exchange(
p->current,it.p->current);
137 std::exchange(
p->it,it.p->it);
138 std::exchange(
p->ec,it.p->ec);
139 std::exchange(
p->current,it.p->current);
150 result.
p->it = ++
p->it;
156 p->current.p->entry = *
p->it;
162 p->current.p->entry = *
p->it;
168 return it1.
p->it == it2.
p->it;
173 return it1.
p->it!=it2.
p->it;
198 p->path = fs::current_path(ec);
217 std::exchange(
p->path,d.p->path);
222 std::exchange(
p->path,d.p->path);
242 return p->path.string();
252 std::replace( s.begin(), s.end(),
'\\',
'/' );
259 bool exist = fs::exists(fs::path(result),ec);
271 fs::path pth =
path();
273 return fs::is_empty(pth);
283 return fs::path(
path).is_relative();
295 result = (
p->path /
path).
string();
311 return fs::create_directory(result,ec);
324 return fs::remove(result,ec);
327bool Dir::rename(
const std::string &orgName,
const std::string &newName,
bool acceptsAbsPath)
const
330 std::string fn1 =
filePath(orgName,acceptsAbsPath);
331 std::string fn2 =
filePath(newName,acceptsAbsPath);
332 fs::rename(fn1,fn2,ec);
336bool Dir::copy(
const std::string &srcName,
const std::string &dstName,
bool acceptsAbsPath)
const
338 const auto ©Options = fs::copy_options::overwrite_existing;
339 std::error_code ec, ec_perm;
340 std::string sn =
filePath(srcName,acceptsAbsPath);
341 std::string dn =
filePath(dstName,acceptsAbsPath);
342 fs::copy(sn,dn,copyOptions,ec);
344 fs::permissions(dn, fs::perms::owner_write, fs::perm_options::add, ec_perm);
351 std::string result = fs::current_path(ec).string();
359 fs::current_path(
path,ec);
365 std::string result = fs::path(
path).lexically_normal().string();
373 std::string result = fs::absolute(
p->path,ec).string();
DirEntry(const DirEntry &)
bool is_directory() const
bool is_regular_file() const
std::unique_ptr< Private > p
DirEntry & operator=(const DirEntry &)
static std::string currentDirPath()
Dir & operator=(const Dir &d)
std::string absPath() const
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
void setPath(const std::string &path)
static bool isRelativePath(const std::string &path)
bool remove(const std::string &path, bool acceptsAbsPath=true) const
bool empty(const std::string &subdir) const
bool copy(const std::string &src, const std::string &dest, bool acceptsAbsPath=true) const
std::string filePath(const std::string &path, bool acceptsAbsPath=true) const
DirIterator iterator() const
bool rmdir(const std::string &path, bool acceptsAbsPath=true) const
bool rename(const std::string &orgName, const std::string &newName, bool acceptsAbsPath=true) const
static std::string cleanDirPath(const std::string &path)
static bool setCurrent(const std::string &path)
std::unique_ptr< Private > p
DirIterator(const DirIterator &it)
const value_type & operator*() const
const value_type * operator->() const
std::unique_ptr< Private > p
DirIterator & operator=(const DirIterator &it)
Minimal replacement for QFileInfo.
static void correctPath(std::string &s)
bool operator==(const DirIterator &it1, const DirIterator &it2)
DirIterator begin(DirIterator it) noexcept
bool operator!=(const DirIterator &it1, const DirIterator &it2)
DirIterator end(const DirIterator &) noexcept
fs::directory_entry entry
Private(const std::string &path)
fs::directory_iterator it