Windows 文件名限制
如果要在 Windows 下创建文件,或者可能将在其他操作系统下创建的文件拷贝至 Windows,就需要考虑 Windows 的文件名限制。否则程序会出错,用户会不高兴。
文件夹与文件
文件夹就是文件,所以两者的限制是一样的。
限制
-
保留字符
- < (小于)
- > (大于)
- : (冒号)
- " (引号)
- / (斜杠)
- \ (反斜杠)
- | (束杠)
- ? (问号)
- * (星号)
-
值为 0~31 的字符不可出现。似乎某些字符是允许出现的,不过目前我无法确实有哪些,并且是否在所有流行的 Windows 版本中都适用。谨慎些的话,可以把这些都排除了。
-
CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8和LPT9都不可作为文件的名称。文件名一般会被最后一个.分为名称与扩展名两个部分。可见NUL.txt和NUL都是非法文件名,而txt.NUL和.NUL都是合法文件名。 -
不可以
(空格)和.(句号)结尾,但可以其开头。可见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/