【问题标题】:Validating file paths验证文件路径
【发布时间】:2010-08-24 19:28:37
【问题描述】:

我们想要验证文件路径,例如foo/bar,用户可以输入。是否可以在 OS X 或 Linux 上创建带有前导或尾随空格的文件,例如foo/ bar /bazz?

【问题讨论】:

    标签: linux macos filenames


    【解决方案1】:

    在大多数可以在 linux 上使用的文件系统中,您不能在文件名中使用“/”和 NULL 字符。就是这样:)

    【讨论】:

    • (待定,)实际上某些文件系统甚至允许您使用'/''\0',我相当确定它的内核 不允许这样做。 (诚​​然,大多数或所有允许这样做的文件系统驱动程序都不会让您创建或什至可能与此类文件交互,但文件系统允许它们的实际布局。)
    • en.wikipedia.org/wiki/Comparison_of_file_systems#Limits 确实。 HFS 不喜欢 ":" 但对 "\0" 很满意
    【解决方案2】:
    touch ' foo '
    

    在 linux 上没问题。

    【讨论】:

      【解决方案3】:

      使用标准 Mac OS HFS+ 文件系统(大多数用户机器上的默认文件系统)在 OS X 上进行快速实验。 可以创建和挂载更传统的 Unix 文件系统。

      ls > " foo "
      ls > "foo "
      ls > " foo"
      ls > foo
      
      
      24 Aug 23:32  foo 
      24 Aug 23:32 foo 
      24 Aug 23:32  foo
      24 Aug 23:32 foo
      
      ls > "foo/ "
      -bash: foo/ : Not a directory
      

      所以 - 前导和尾随空格 - 是的。这确保了与经典 Mac OS 文件的兼容性。 使用 / - 没有。

      现在试试

      ls > Foo
      

      我们看到 'foo' 已更新。 HFS 默认不区分大小写(可以启用,但如果需要,最好使用完全替代的 FS)

      24 Aug 23:40 foo
      

      如果您的代码要求 Foo 和 foo 同时存在,这显然会导致将某些标准 Unix 代码转换为 OS X 时出现问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-20
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多