【发布时间】:2021-02-22 00:53:08
【问题描述】:
有没有一种简单的方法,使用<filesystem> 或<boost/filesystem.hpp> 将可能由std::vector<char> 表示的字节序列转换为可移植的文件名字符串,以便可以将结果转换回输入序列?
例如,如果平台允许文件名由 [a,f] 和 [0,9] 范围内的字符组成。适合上述约束的转换函数可能是简单地将每个字符输出为两位数十六进制等效值的转换函数,因此 {'a', 'b'} 将变为 "6768" 为 'a' -> 97 -> 0x67,和 'b' -> 98 -> 0x68。
【问题讨论】:
-
我不太明白你在这里要求什么。第一段看起来很清楚(从输入字符串构建一个
path,然后调用path::generic_u8string),但第二段是在讨论一种不能跨不同文件系统移植的字节编码方案。这个答案不适合那个。 -
@NicolBolas 澄清一下,考虑一个输入字节序列为“/a/b”的示例,现在从该路径构造的
std::path实例将在目录'a'。现在我们已经丢失了足够的信息来从文件名中恢复“/a/b”。如果您要将问题约束应用于输入序列“/a/b”,则生成的文件(带有某个名称)的名称将允许我们 1)取回原始序列,以及 2)导致文件名是它自己的,而不是另一个目录中的文件。 -
好的,所以问题是您并不真正了解
filesystem::path中发生了什么。就像,你所说的关于path包含的内容都是错误的。
标签: c++ filenames c++20 boost-filesystem