我不是在询问文件名的一般语法规则。我的意思是会突然跳出来咬你的陷阱。例如,尝试在 Windows 上将文件命名为“COM<n>”?
7 回答
来自:http ://www.grouplogic.com/knowledge/index.cfm/fuseaction/view_Info/docID/111 。
以下字符在使用 NTFS 的 Windows 上作为文件或文件夹名称无效:
/
?
<
>
\
:
*
|
"
以及您可以使用 Ctrl 键键入的任何字符。除了上述非法字符之外,在
^
使用 FAT 文件系统的 Windows 操作系统下也不允许使用插入符号。在使用 FAT 文件系统的 Windows 下,文件和文件夹名称最长可达 255 个字符。
在使用 NTFS 文件系统的 Windows 下,文件和文件夹名称最长可达 256 个字符。
在 Window 下,两个系统下的完整路径长度均为 260 个字符。
除了这些字符之外,以下约定也是非法的:
- 在名称末尾放置一个空格
- 在名称的末尾放置一个句点
Windows 下也保留以下文件名:
aux
,com1
,com2
,- ...
com9
,lpt1
,lpt2
,- ...
lpt9
,con
,nul
,prn
Windows 上合法和非法文件名的完整描述:http://msdn.microsoft.com/en-us/library/aa365247.aspx
当你不知道时,一个棘手的 Unix 陷阱:
以 - 或 - 开头的文件是合法的,但使用起来很麻烦,因为许多命令行工具认为您正在为它们提供选项。
其中许多工具都有一个特殊的标记“--”来表示选项的结束:
gzip -9vf -- -mydashedfilename
正如其他人所说,像 COM1 这样的设备名称在 Windows 下不可能作为文件名,因为它们是保留设备。
但是,有一种转义方法可以创建和访问具有这些保留名称的文件,例如,此命令会将命令的输出重定向ver
到名为 COM1 的文件中:
ver > "\\?\C:\Users\username\COM1"
现在您将拥有一个名为 COM1 的文件,99% 的程序将无法打开它,如果您尝试访问它可能会冻结。
这是解释此“文件命名空间”如何工作的 Microsoft 文章。基本上,它告诉 Windows 不要对文本进行任何字符串处理并将其直接传递给文件系统。此技巧还可用于处理超过 260 个字符的路径。
boost::filesystem可移植性指南有很多很好的信息。
好吧,对于 MSDOS/Windows,NUL、PRN、LPT<n> 和 CON。如果与扩展名一起使用,它们甚至会导致问题:“NUL.TXT”
除非您要接触特殊目录,否则 Linux 上唯一的非法名称是 ' .
' 和 ' ..
'。任何其他名称都是可能的,尽管从 shell 访问其中一些名称需要使用转义序列。
-
编辑:正如 Vinko Vrsalovic 所说,以 ' ' 和 ' '开头的文件--
对 shell 来说是一种痛苦,因为这些字符序列是由应用程序解释的,而不是 shell。