我在同事的一个项目中偶然发现了这一点:
foreach (var invalidChar in Path.GetInvalidFileNameChars()) fileName = fileName.Replace(invalidChar, '\0');
gerenal的想法是显而易见的,但我想知道为什么他选择用null字符替换无效字符而不是'常规'字符或只是空字符串.
我猜这个选择有很好的理由(写这篇文章的人是我们团队的老人),我只想知道这个原因是什么.
在评论问题之后,我正在寻找证明文件名实际上不允许\ 0的证明.我找到了:
使用当前代码页中的任何字符作为名称,包括扩展字符集(128-255)中的Unicode字符和字符,但以下情况除外:
*以下保留字符:<(小于),>(大于) ,:(冒号),"(双引号),/(正斜杠),\(反斜杠),|(垂直条或管道),?(问号),*(星号)
*整数值零,有时也称为ASCII NUL字符.
*整数表示形式在1到31范围内的字符,但允许使用这些字符的备用数据流除外.