转换为 const char * 后,boost 文件系统规范路径无效

kit*_*kun 3 c++ boost-filesystem

我正在尝试转换相对路径并将其转换为绝对路径以使用 boost 文件系统传递给 SQLite。这应该适用于 windows 和 linux

    boost::filesystem::path path("../../data/dominion");
    boost::filesystem::path file("dominion.db");
    boost::filesystem::path canonical = boost::filesystem::canonical(dataPath / file);
Run Code Online (Sandbox Code Playgroud)

规范回报

   m_pathname=L"D:/Users\\me\\Documents\\tonkatsu\\data\\dominion\\dominion.db" 
Run Code Online (Sandbox Code Playgroud)

如您所见,路径“D:/”的开头不正确。我也尝试调用 normalize() 没有成功

有没有办法解决这个问题?

out*_*yer 5

尽管不是标准做法,但 Windows 上也接受正斜杠,这就是 boost 不强制转换的原因。

但是,某些库不接受正斜杠。[1]旨在通过将路径转换为系统的首选表示(即在 Windows 上使用反斜杠)来解决此类情况。boost::filesystem::path::make_preferred()

[1]这个较旧的参考使这种行为更加明显

如下所述,虽然(大部分)Windows API 接受正斜杠,甚至是正斜杠和反斜杠的混合,但某些用户界面甚至在 Windows 中包含的应用程序中也不接受。