如果要在 Windows 下创建文件,或者可能将在其他操作系统下创建的文件拷贝至 Windows,就需要考虑 Windows 的文件名限制。否则程序会出错,用户会不高兴。

文件夹与文件

文件夹就是文件,所以两者的限制是一样的。

限制

  1. 保留字符

    1. < (小于)
    2. > (大于)
    3. : (冒号)
    4. " (引号)
    5. / (斜杠)
    6. \ (反斜杠)
    7. | (束杠)
    8. ? (问号)
    9. * (星号)
  2. 值为 0~31 的字符不可出现。似乎某些字符是允许出现的,不过目前我无法确实有哪些,并且是否在所有流行的 Windows 版本中都适用。谨慎些的话,可以把这些都排除了。

  3. CONPRNAUXNULCOM1COM2COM3COM4COM5COM6COM7COM8COM9LPT1LPT2LPT3LPT4LPT5LPT6LPT7LPT8LPT9都不可作为文件的名称。文件名一般会被最后一个.分为名称与扩展名两个部分。可见NUL.txtNUL都是非法文件名,而txt.NUL.NUL都是合法文件名。

  4. 不可以 (空格)和.(句号)结尾,但可以其开头。可见note.txt note.是非法文件名,而 note.txt.note.txt是合法文件名。

所有的限制都在参考内容里有描述。

文件名最大长度

很难确定文件名到底能有多长,不同的 Windows 版本的限制不一样,而且还要配合路径的最大长度限制。那么可以使用128这个数来作为最大长度限制。所谓的限制指的是字符个数而非编码后的字节个数。

参考

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx#naming_conventions
https://blog.codinghorror.com/filesystem-paths-how-long-is-too-long/