以与平台无关的方式将绝对文件系统路径转换为文件URI

时间:2018-02-14 22:05:43

标签: c++ boost uri boost-filesystem

在C ++中,我使用boost::filesystem::path来表示资产的路径。我有从这个绝对路径构建文件URI的逻辑。我在Windows和Linux上都运行这个代码,这使得这个任务非常简单,因为在Windows文件URI上,我需要显式插入一个额外的斜杠字符,而Linux中的根路径斜杠加倍作为主机/路径分隔符:

视窗:

file://localhost/C:/my/data/foo.txt

Linux的:

file://localhost/my/data/foo.txt

代码:

#ifdef WINDOWS
#define BASE_DIRECTORY "C:\\my\\data"
#elseif // assume LINUX
#define BASE_DIRECTORY "/my/data"
#endif

auto test_file = boost::filesystem::canonical(BASE_DIRECTORY) / "foo.txt";
std::string file_uri = "file://localhost/" + test_file.generic_string();

这在linux方面并不常用,因为我最终得到了:

file://localhost//my/data/foo.txt

在主机之后有双斜杠是否有效?如果是这样,那么这将是我认为的解决方案。但是在主机无效之后,我已经假设双斜线。这里有一个简单,便携的解决方案吗?

0 个答案:

没有答案