代码之家  ›  专栏  ›  技术社区  ›  erickson

各种平台的保留文件名是什么?

  •  16
  • erickson  · 技术社区  · 17 年前

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

    7 回复  |  直到 17 年前
        1
  •  18
  •   Jabberwocky    6 年前

    发件人: http://www.grouplogic.com/knowledge/index.cfm/fuseaction/view_Info/docID/111 .

    以下字符在使用NTFS的Windows上作为文件名或文件夹名无效: / ? < > \ : * | " 以及您可以用Ctrl键键入的任何字符。

    除了上述非法字符外,插入符号 ^ 在Windows操作系统下也不允许使用FAT文件系统。

    在Windows下,使用FAT文件系统的文件和文件夹名称的长度最多可达255个字符。

    在Windows下,使用NTFS文件系统的文件和文件夹名称的长度最多可达256个字符。

    在Window下,两种系统下的完整路径长度均为260个字符。

    除了这些字符外,以下约定也是非法的:

    • 在名称末尾添加空格
    • 在名字末尾加一个句号

    以下文件名也在Windows下保留:

    • aux ,
    • com1 ,
    • com2 ,
    • ...
    • com9 ,
    • lpt1 ,
    • lpt2 ,
    • ...
    • lpt9 ,
    • con ,
    • nul ,
    • prn
        2
  •  8
  •   Adam Rosenfield    17 年前

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

        3
  •  7
  •   Vinko Vrsalovic    17 年前

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

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

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

    gzip -9vf -- -mydashedfilename
    
        4
  •  7
  •   Malvineous    10 年前

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

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

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

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

    Here's the Microsoft article 这解释了这个“文件名称空间”是如何工作的。基本上,它告诉Windows不要对文本进行任何字符串处理,而是直接将其传递到文件系统。此技巧也可用于处理长度超过260个字符的路径。

        5
  •  4
  •   Trent    17 年前

    boost::文件系统 Portability Guide 有很多好消息。

        6
  •  2
  •   James Curran    17 年前

    嗯,对于MSDOS/Windows、NUL、PRN、LPT<n>;如果与扩展名“NUL.TXT”一起使用,它们甚至会引起问题

        7
  •  1
  •   Branan    17 年前

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

    编辑:正如Vinko Vrsalovic所说,以“”开头的文件 - 以及 -- 是shell的痛点,因为这些字符序列是由应用程序而不是shell解释的。

    推荐文章