【问题标题】:GetInvalidFileNameChars() doesn't contain all illegal charsGetInvalidFileNameChars() 不包含所有非法字符
【发布时间】:2015-01-30 22:25:17
【问题描述】:

根据http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars%28v=vs.110%29.aspxPath.GetInvalidFileNameChars()应该给出以下输出

// Note: Some characters may not be displayable on the console. 
// The output will look something like: 
// 
// The following characters are invalid in a path: 
// Char    Hex Value 
// ",      0022 
// <,      003C 
// >,      003E 
// |,      007C 
// ... 
// 
// The following characters are invalid in a filename: 
// Char    Hex Value 
// ",      0022 
// <,      003C 
// >,      003E 
// |,      007C 
// ...

但我只是得到

Char    Hex Value
,   0000
/,  002F

http://ideone.com/UdRbCC

发生了什么事?

【问题讨论】:

  • 取决于环境。这就是将此任务推迟到库函数而不是根据您的机器对其进行硬编码的全部原因。显然,运行该代码的机器具有相当宽松的文件名/路径限制。
  • “输出看起来像something...”意思是它所说的。同一页面还指出“完整的无效字符集可能因文件系统而异。”
  • 我有一种感觉,它可能取决于环境。但是,如果我删除无效字符(来自Path.GetInvalidFileNameChars())并执行Path.GetExtension(Filename),它仍然会引发无效字符异常。让我变成一只悲伤的熊猫!

标签: c#


【解决方案1】:

来自您链接的文章:

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

【讨论】:

  • “因文件系统而异”部分很重要。仅仅因为一个字符就平台本身而言是有效的,并不意味着它在每个挂载的文件系统中都是有效的。为了获得更多乐趣,也可以反过来说,文件系统可以允许比平台更多的字符,因此您可能无法使用包含无效字符的文件。
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2011-01-27
  • 1970-01-01
  • 2021-02-13
  • 2021-12-21
相关资源
最近更新 更多