pocoproject / poco

The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems.
https://pocoproject.org
Other
8.04k stars 2.11k forks source link

Poco::Path::forDirectory("C:") throws if the path is disk-letter only #4562

Closed siren186 closed 1 month ago

siren186 commented 1 month ago

Is your feature request related to a problem? Please describe.

Poco::Path::forDirectory("G:\\abc\\"); // OK
Poco::Path::forDirectory("G:\\abc"); // OK
Poco::Path::forDirectory("G:\\"); // OK
Poco::Path::forDirectory("G:"); // Poco::PathSyntaxException

// Why not auto add backslash for directories
// If I use Poco::Path, I have to do something else like this:
std::string str = "G:";
if (!str.ends_with('\\'))
{
    str.push_back('\\'); // To ensure Poco::Path not crash for me
}
Poco::Path::forDirectory(str);

Describe the solution you'd like

// If Poco::Path can auto add backslash for me, It can make my code looks more clean.
std::string str = "G:";
Poco::Path::forDirectory(str); // Please do not throw any exception

Describe alternatives you've considered

Or Poco can add some methods just like Windows API PathAddBackslash do

LPWSTR PathAddBackslashW(
  [in, out] LPWSTR pszPath
);