【问题标题】:Invalid characters in a filename on Windows?Windows上文件名中的无效字符?
【发布时间】:2019-07-05 01:19:28
【问题描述】:

根据 MSDN ,以下字符不能作为文件名的一部分:

使用当前代码页中的任何字符作为名称,包括 Unicode 字符和扩展字符集 (128–255) 中的字符,但以下字符除外:

◦以下保留字符:

  • <(小于)
  • >(大于)
  • :(冒号)
  • "(双引号)
  • /(正斜杠)
  • \(反斜杠)
  • |(竖条或竖管)
  • ?(问号)
  • *(星号)

在 .net 中提供了一个 api 来查找文件名中不允许使用的字符

char[] invalidFileChars = Path.GetInvalidFileNameChars();

备注

不保证从此方法返回的数组包含文件和目录名称中无效的完整字符集。完整的无效字符集可能因文件系统而异。例如,在基于 Windows 的桌面平台上,无效路径字符可能包括 ASCII/Unicode 字符 1 到 31,以及引号 (")、小于 ()、竖线 (|)、退格 ( \b)、null (\0) 和制表符 (\t)。

但是在备注部分中说它取决于文件系统。

在 XP 和 windows 7 等基于 windows 的操作系统上使用这个 api 是否安全?

【问题讨论】:

  • 操作系统无法确定文件系统。

标签: c# special-characters filenames


【解决方案1】:

是的,在基于 ASCII 的文件系统中,Path.GetInvalidFileNameChars() 将保证您的文件名安全。如果您检查ASCII chart here,您会发现左列中的所有内容都被排除在外,其余列中的某些字符也被排除在外。检查返回数组中每个 char 的十进制表示,以获取排除内容的完整列表。

【讨论】:

    【解决方案2】:

    第一部分是指定语言本身禁止的字符。但是,由于类是从具有特定名称的文件(在大多数平台上)加载的,因此底层平台可能会由于文件系统而施加额外的限制。在 Java 中也是如此,尽管您可以通过使用自定义类加载器在技术上绕过它。

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2011-04-19
      • 2010-09-12
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      相关资源
      最近更新 更多