我正在尝试转换相对路径并将其转换为绝对路径以使用 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);
规范返回
m_pathname=L"D:/Users\\me\\Documents\\tonkatsu\\data\\dominion\\dominion.db"
如您所见,路径“D:/”的开头不正确。我也尝试调用 normalize() 但没有成功
有没有办法解决这个问题?
最佳答案
尽管不是标准做法,Windows 也接受正斜杠,这就是 boost 不强制转换的原因。
但是,有些图书馆不接受正斜杠。 boost::filesystem::path::make_preferred()
[1] 旨在通过将路径转换为系统的首选 表示(即在 Windows 上使用反斜杠)来解决此类情况。
[1] This older reference makes that behaviour more obvious
如下所述,虽然(大部分)Windows API 接受正斜杠,甚至正斜杠和反斜杠的混合,但一些用户界面甚至在 Windows 中包含的应用程序中也不接受。
关于c++ - 转换为 const char * 后,boost 文件系统规范路径无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27110973/