在F#中编写一些基于属性的测试时,我发现System.IO.DirectoryInfo
的构造函数有一种非常奇怪的行为。基于documentation,我希望在我尝试构造具有无效路径字符的ArgumentException
时抛出DirectoryInfo
;我希望Path.GetInvalidPathChars()
成为这些的可靠来源。它的documentation表示,"从此方法返回的数组不保证包含在文件和目录名称中无效的完整字符集&#34 ;;但它没有说明返回无效字符的方法!表单提要('\012'
)是这些无效字符之一,正如您所料;我希望任何类型的控制字符在路径名中都是无效的。事实上,如果我尝试在中间或开头构建一个DirectoryInfo
,它就不起作用。但是,如果我把它放在最后,它确实有效:
虽然生成的绝对路径中没有表单提要,但确认这确实是无效的路径字符。我确认我在那个REPL会话中创建的目录就在那里,名称中没有控制字符。但是,为了使它更奇怪,当我将DirectoryInfo转换回字符串时,垃圾字符被维护:
然后,水平标签'\009'
,换行'\010'
和垂直标签'\011'
以及回车'\013'
展示了相同的行为,但拒绝了所有其他控制字符。如果他们被接受,人们会认为他们至少会被削减。
这里发生了什么?这是DirectoryInfo
中的错误,还是在.NET中对此行为有一些合理/一致的解释? (我可能需要寻找其他类似的坑洼!)