【问题标题】:What character guaranteed NOT to be in filename (Unix/Ubuntu)什么字符保证不在文件名中(Unix/Ubuntu)
【发布时间】:2013-12-16 01:28:07
【问题描述】:

从不同的角度接近this question,我可以在下面的输入文件中使用什么字符#

1#2#3#/home/user/foo.txt
4#5#6#/home/user/foo.test.---.txt
7#8#9#/home/user/foo. .   .!!+.txt
...

这样当我标记它时(在 C++ 中使用 strtok (str, "#") )我保证文件名不会破坏我的程序?

【问题讨论】:

  • 没关系,只需选择一个分隔符,然后转义字符串中已有的任何现有分隔符。这就是字符串可以包含引号的方式。
  • @meagar 是的,但这是用户将要使用的程序,如果他们四处走动并逃脱潜在的数百个分隔符,这将是一个负担(特别是如果他们不是程序员并且这样做,例如,记事本)

标签: linux ubuntu filenames


【解决方案1】:

只有两个字符。空字节'\0' 和斜线'/'

Wikipedia:

在类 Unix 文件系统中,空字符,因为它是字符串结束指示符和路径分隔符 / 是被禁止的。

而是按照@meagar 所说的去做,并转义你正在使用的任何字符。

【讨论】:

  • 不是我希望的答案。我只会用逗号...不要有太多包含逗号的文件。
  • 照@meagar 说的做,转义你使用的任何字符。
【解决方案2】:

正如其他人指出的那样,唯一的保证是 null 或 '/' 但如果您想使用其他内容,文件名中比逗号更不常用的字符(实际上相当常见)将是换行符。

【讨论】:

  • 我实际上想过这个,除了行用换行符分隔。理论上我可以使用模运算,但那样做并不直观。我只是在顶部放一个注释,不要在文件名中使用逗号
猜你喜欢
  • 2013-12-18
  • 1970-01-01
  • 2023-03-18
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多