我正在尝试转换相对路径并将其转换为绝对路径以使用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()而没有成功
有没有办法解决这个问题?
答案 0 :(得分:4)
尽管不是标准做法,但Windows上也接受了正斜杠,这就是为什么提升不会强制转换。
但是,有些图书馆不接受正斜杠。 boost::filesystem::path::make_preferred()
[1] 旨在通过将路径转换为系统的首选表示(即在Windows上使用反斜杠)来解决此类情况。
[1] This older reference makes that behaviour more obvious
如下所述,虽然(大多数)Windows API接受正斜杠,甚至是正斜杠和反斜杠的混合,但某些用户界面甚至在Windows中包含的应用程序上都没有。