c++ 将 char* 的 ascii 字符转换为 unix 文件名

标签 c++ ascii filenames

我有一个 char* 只包含 ASCII 字符(十进制:32-126)。我正在寻找一个 c++ 函数,它转义(在字符前添加反斜杠)在 unix 文件系统中具有特殊含义的字符,如“/”或“.”。我想稍后用 fopen 打开文件。

我不确定,手动替换是否是一个不错的选择。我不知道所有具有特殊含义的字符。我也不知道是否“?”或者 '*' 可以与 fopen 一起使用。

最佳答案

实际上 Unix(或更具体地说是 SuS)只允许在文件名中使用字节值 '/' 和 '\0'。其他一切实际上都是公平的游戏。 确切的(在他们紧跟在'/'之后的意义上)字符串“。”和“..”保留给相对路径访问,但它们在 Unix 路径中非常有效。

当然还有任意数量和顺序的“.”在 Unix 文件名中是完全允许的,只要除 '/' 或 '\0' 之外的另一个字符是文件名的一部分。是的,换行符、任何控制字符,它们都是完全有效的 Unix 文件名。

当然,您使用的文件系统可能对允许的内容有不同的想法,但您只是在询问 Unix。

更新:

哦,应该注意的是,Unix 没有为文件名指定圆顶“解析”方法。这实质上意味着,文件名被视为键→值数据库中的二进制 blob 键。这也意味着,对于 Unix 文件名没有“转义”这样的事情。

关于c++ 将 char* 的 ascii 字符转换为 unix 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585667/

相关文章:

c++ - move 语义 std::move 如何使用它

c++ - 函数没有 volatile。怎么修?

c++ - 如何使用 C++ 读取包含二进制和 ASCII 混合数据的文件

ascii - Mips 地址上的空格

java - 如何将时间戳附加到 java.util.logging.FileHandler.pattern 的文件名

c++ - 按指定的顺序迭代元组的元素

c++ - 从 CSV C++ 中提取 double 值时出现意外结果

java - TextView::getText() 对于不可见字符返回 -3

windows - Git pull 无效的 Windows 文件名

c++ - 在 VS2008 中为 __FILE__ 打印的完整路径名