Windows 和 Linux 目录名称中禁止使用哪些字符?

新手上路,请多包涵

I know that / is illegal in Linux, and the following are illegal in Windows (I think) * . " / \ [ ] : ; | ,

我还缺少什么?

但是,我需要一份综合指南,并且需要考虑到双字节字符。链接到外部资源对我来说很好。

我需要首先使用可能包含禁止字符的名称在文件系统上创建一个目录,因此我计划用下划线替换这些字符。然后我需要将此目录及其内容写入一个 zip 文件(使用 Java),因此任何有关 zip 目录名称的其他建议将不胜感激。

原文由 Jeff 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

禁止文件名字符的“综合指南”在 Windows 上不起作用,因为它保留了文件名和字符。是的,像 * " ? 等字符是被禁止的,但是有无数个名称只由被禁止的有效字符组成。例如,空格和点是有效的文件名字符,但禁止仅由这些字符组成的名称。

Windows 不区分大小写字符,因此如果名为 a A 的文件夹。更糟糕的是,看似允许的名称,如 PRNCON 以及许多其他名称,都被保留且不允许使用。 Windows 也有几个长度限制;如果移动到另一个文件夹,一个文件夹中有效的文件名可能会变得无效。 命名文件和文件夹 的规则在 Microsoft 文档中。

通常,您不能使用用户生成的文本来创建 Windows 目录名称。如果您想允许用户命名他们想要的任何名称,您必须创建安全名称,例如 AABA2 等,存储用户生成应用程序数据文件中的名称及其等效路径,并在应用程序中执行路径映射。

如果您绝对必须允许用户生成的文件夹名称,那么判断它们是否无效的唯一方法是捕获异常并假定名称无效。即使这样也充满危险,因为拒绝访问、脱机驱动器和驱动器空间不足引发的异常与可能因无效名称引发的异常重叠。你正在打开一个巨大的伤害罐头。

原文由 Dour High Arch 发布,翻译遵循 CC BY-SA 4.0 许可协议

  1. 禁止 打印的 ASCII 字符 是:

    • Linux/Unix:
        / (forward slash)
    
    
    
    • 视窗:
        < (less than)
       > (greater than)
       : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
       " (double quote)
       / (forward slash)
       \ (backslash)
       | (vertical bar or pipe)
       ? (question mark)
           * (asterisk)
    
    
    
  2. 不可打印字符

如果您的数据来自允许不可打印字符的来源,那么还有更多需要检查的地方。

  • Linux/Unix:

        0 (NULL byte)
    
    
    
  • 视窗:

        0-31 (ASCII control characters)
    
    
    

注意: 虽然在 Linux/Unix 文件系统下创建文件名中带有控制字符的文件是合法的, 但对于用户来说处理这些文件可能是一场噩梦

  1. 保留文件名

保留以下文件名:

  • 视窗:

        CON, PRN, AUX, NUL
       COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
       LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
    
    
    

    (单独使用和具有任意文件扩展名,例如 LPT1.txt )。

  1. 其他规则

    • 视窗:

    文件名不能以空格或点结尾。

    • 苹果系统:

    你没有要求它,但以防万一:冒号 : 和正斜杠 / 取决于上下文是不允许的(例如,Finder支持斜杠,终端支持冒号)。 (更多细节)

原文由 Christopher Oezbek 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题