Windows 上的文件名中存在无效字符?

Rag*_*v55 5 c# filenames special-characters

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

\n\n
\n

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

\n\n

\xe2\x97\xa6以下保留字符:

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

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

\n\n
char[] invalidFileChars = Path.GetInvalidFileNameChars();\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

评论

\n\n

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

\n
\n\n

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

\n\n

在 XP 和 Windows 7 等基于 Windows 的操作系统上使用此 api 安全吗?

\n

Pau*_*ann 3

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