4

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

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

◦以下保留字符:

  • <(少于)
  • >(比...更棒)
  • :(冒号)
  • "(双引号)
  • /(正斜杠)
  • \(反斜杠)
  • |(垂直条或管)
  • ?(问号)
  • *(星号)

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

char[] invalidFileChars = Path.GetInvalidFileNameChars();

评论

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

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

将此 api 用于 XP 和 Windows 7 等基于 Windows 的操作系统是否安全?

4

2 回答 2

3

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

于 2012-07-30T12:12:50.410 回答
0

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

于 2012-07-30T12:12:35.157 回答