我不是在询问文件名的一般语法规则.我的意思是陷入困境并陷入困境的陷阱.例如,尝试在Windows上命名文件"COM
来自:http://www.grouplogic.com/knowledge/index.cfm/fuseaction/view_Info/docID/111.
使用NTFS在Windows上使用以下字符作为文件或文件夹名称无效:
/
?
<
>
\
:
*
|
"
以及可以使用Ctrl键键入的任何字符.除了上述非法字符外,
^
使用FAT文件系统的Windows操作系统也不允许使用插入符号.在Windows下使用FAT文件系统文件和文件夹名称最长可达255个字符.
在Windows下使用NTFS文件系统文件和文件夹名称最长可达256个字符.
在Window下,两个系统下的完整路径长度为260个字符.
除了这些字符,以下约定也是非法的:
在名称末尾放置一个空格
在名称末尾添加句点
Windows下还保留以下文件名:
aux
,
com1
,
com2
,...
com9
,
lpt1
,
lpt2
,...
lpt9
,
con
,
nul
,
prn
Windows上合法和非法文件名的完整描述: http://msdn.microsoft.com/en-us/library/aa365247.aspx
正如其他人所说,像Windows这样的设备名称不可能作为Windows下的文件名,因为它们是保留的设备.
但是,有一种转义方法可以创建和访问具有这些保留名称的文件,例如,此命令会将命令的输出重定向ver
到名为COM1的文件中:
ver > "\\?\C:\Users\username\COM1"
现在你将有一个名为COM1的文件,99%的程序将无法打开,如果你试图访问它可能会冻结.
以下是Microsoft文章,解释了这个"文件名称空间"的工作原理.基本上它告诉Windows不要对文本进行任何字符串处理并将其直接传递给文件系统.此技巧还可用于处理长度超过260个字符的路径.
不知道时会遇到棘手的Unix陷阱:
以-或-开头的文件是合法的,但使用起来很麻烦,因为许多命令行工具都认为您正在为它们提供选项。
这些工具中的许多工具都有一个特殊的标记“-”来表示选项的结束:
gzip -9vf -- -mydashedfilename