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

标签 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);

规范返回

   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/

相关文章:

c++ - WINAPI 光标在应用程序窗口上的单击位置

c++ - 如何在不打开文件的情况下测试文件是否被锁定和/或只读?

c++ - create_directory (“/MyPath/.MyFolder”)未创建目录;期望创建一个隐藏目录

c++ - 缺少 directory_entry 的比较运算符

c++ - boost::filesystem::path.parent_path() 和空格

c++ - CMake 错误 : target name "test" is reserved or not valid

c++ - 从 .txt 文件中读取字母和数字

c++ - 使用 atoi 和错误 :unresolved external symbol

C++。更改对象数据成员的数据成员

C++ - 如何以平台无关、线程安全的方式将文件的上次修改日期和时间格式化为用户首选的日期/时间区域设置格式