14

我不是在询问文件名的一般语法规则。我的意思是会突然跳出来咬你的陷阱。例如,尝试在 Windows 上将文件命名为“COM<n>”?

4

7 回答 7

18

来自: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
于 2008-09-23T17:24:53.577 回答
8

Windows 上合法和非法文件名的完整描述:http://msdn.microsoft.com/en-us/library/aa365247.aspx

于 2008-09-23T17:27:03.493 回答
7

当你不知道时,一个棘手的 Unix 陷阱:

以 - 或 - 开头的文件是合法的,但使用起来很麻烦,因为许多命令行工具认为您正在为它们提供选项。

其中许多工具都有一个特殊的标记“--”来表示选项的结束:

gzip -9vf -- -mydashedfilename
于 2008-09-23T17:24:01.627 回答
7

正如其他人所说,像 COM1 这样的设备名称在 Windows 下不可能作为文件名,因为它们是保留设备。

但是,有一种转义方法可以创建和访问具有这些保留名称的文件,例如,此命令会将命令的输出重定向ver到名为 COM1 的文件中:

ver > "\\?\C:\Users\username\COM1"

现在您将拥有一个名为 COM1 的文件,99% 的程序将无法打开它,如果您尝试访问它可能会冻结。

这是解释此“文件命名空间”如何工作的 Microsoft 文章。基本上,它告诉 Windows 不要对文本进行任何字符串处理并将其直接传递给文件系统。此技巧还可用于处理超过 260 个字符的路径。

于 2015-01-12T23:34:00.363 回答
4

boost::filesystem可移植性指南有很多很好的信息。

于 2008-09-23T17:29:43.800 回答
2

好吧,对于 MSDOS/Windows,NUL、PRN、LPT<n> 和 CON。如果与扩展名一起使用,它们甚至会导致问题:“NUL.TXT”

于 2008-09-23T17:21:28.017 回答
1

除非您要接触特殊目录,否则 Linux 上唯一的非法名称是 ' .' 和 ' ..'。任何其他名称都是可能的,尽管从 shell 访问其中一些名称需要使用转义序列。

-编辑:正如 Vinko Vrsalovic 所说,以 ' ' 和 ' '开头的文件--对 shell 来说是一种痛苦,因为这些字符序列是由应用程序解释的,而不是 shell。

于 2008-09-23T17:24:13.953 回答