diff --git a/include/nana/filesystem/filesystem.hpp b/include/nana/filesystem/filesystem.hpp index 1bbe3aa9..b7cb9cdc 100644 --- a/include/nana/filesystem/filesystem.hpp +++ b/include/nana/filesystem/filesystem.hpp @@ -112,7 +112,7 @@ namespace nana { namespace experimental { namespace filesystem public: #if defined(NANA_WINDOWS) using value_type = wchar_t; - const static value_type preferred_separator = '\\'; //? L'\\' ? + const static value_type preferred_separator = L'\\'; //? L'\\' ? #else using value_type = char; const static value_type preferred_separator = '/'; @@ -151,10 +151,10 @@ namespace nana { namespace experimental { namespace filesystem //bool has_root_directory() const; //bool has_root_path() const; //bool has_relative_path() const; - bool has_parent_path() const { return !parent_path().empty(); }; // temp;; - bool has_filename() const { return !filename().empty(); }; // temp; + bool has_parent_path() const { return !parent_path().string().empty(); }; // temp;; + bool has_filename() const { return !filename().string().empty(); }; // temp; //bool has_stem() const; - bool has_extension() const { return !extension().empty(); }; // temp + bool has_extension() const { return !extension().string().empty(); }; // temp //bool is_absolute() const; //bool is_relative() const; diff --git a/source/filesystem/filesystem.cpp b/source/filesystem/filesystem.cpp index 1f523f3a..ead15a1a 100644 --- a/source/filesystem/filesystem.cpp +++ b/source/filesystem/filesystem.cpp @@ -110,6 +110,7 @@ namespace nana { namespace experimental { namespace filesystem return pathstr_.compare(p.pathstr_); } + /// true if the path is empty, false otherwise. ?? bool path::empty() const noexcept { #if defined(NANA_WINDOWS) @@ -122,17 +123,20 @@ namespace nana { namespace experimental { namespace filesystem path path::extension() const { + // todo: make more globlal #if defined(NANA_WINDOWS) - auto pos = pathstr_.find_last_of(L"\\/."); + auto SLorP=L"\\/."; + auto P=L'.'; #else - auto pos = pathstr_.find_last_of("\\/."); + auto SLorP="\\/."; + auto P='.'; #endif - if ((pos == pathstr_.npos) || (pathstr_[pos] != '.')) - return path(); + auto pos = pathstr_.find_last_of(SLorP); - - if (pos + 1 == pathstr_.size()) - return path(); + if ( ( pos == pathstr_.npos) + || ( pathstr_[pos] != P ) + || ( pos + 1 == pathstr_.size() )) + return path(); return path(pathstr_.substr(pos)); }