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

5
根据 MSDN 的说明,以下字符不能作为文件名的一部分:
使用当前代码页中的任何字符作为名称,包括 Unicode 字符和扩展字符集 (128-255) 中的字符,但不包括以下内容:
◦以下保留字符: • <(小于号) • >(大于号) • :(冒号) • "(双引号) • /(正斜杠) • \(反斜杠) • |(竖线或管道符号) • ?(问号) • *(星号)
在 .net 中提供了一个 API 来查找文件名中不允许出现的字符。
char[] invalidFileChars = Path.GetInvalidFileNameChars();

备注

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

但是在备注部分中提到,这取决于文件系统。

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


6
操作系统不决定文件系统。 - leppie
安全是一个相对的概念。如果“安全”意味着“我可以在同一系统上保存并加载它”,那么是的。如果“安全”意味着“我可以将它移植到另一个文件系统”,那么不是。 - Paul Childs
你有没有特别的原因不直接等待并捕获错误呢? - arkon
2个回答

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

0

第一部分是指定语言本身禁止使用哪些字符。然而,由于类是从具有特定名称的文件中加载的(在大多数平台上),底层平台可能会由于文件系统而施加其他限制。Java也是如此,尽管您可以使用自定义类加载器来规避这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接