我使用IO.DirectoryInfo来清理路径。但是,当路径以" \ CON"结尾时,它似乎表现出奇怪的行为。例如:
IO.DirectoryInfo("C:\FOOBAR\").FullName
将返回:
C:\FOOBAR\
但是,在这些例子中:
IO.DirectoryInfo("C:\CON").FullName
IO.DirectoryInfo("C:\SUB\CON").FullName
IO.DirectoryInfo("..\CON").FullName
IO.DirectoryInfo("CON").FullName
返回值始终为:
\\.\CON
因此,当用户想要创建名为" CON"的目录时,整个程序就会爆炸。
在过去我曾见过.Net Framework所做的所有奇怪的事情中,这都很有用。谁能解释一下这里发生了什么?
答案 0 :(得分:5)
CON是一个保留的文件名,具有很长的历史记录作为MS-DOS设备名称。正如有关命名文件,路径和命名空间的文档中所述:
请勿对文件名使用以下保留名称: CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8和LPT9。同时避免使用这些名称后立即进行扩展;例如,不建议使用NUL.txt。
请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx
答案 1 :(得分:4)
我怀疑是因为CON
是DOS的延续。在DOS中CON
是一个引用CONSOLE的特殊文件,因此您可以在cmd提示符下执行此操作:
COPY CON FILENAME
现在在名为FILENAME的文件中键入您想要的任何内容,即“这里是一些示例文本。”
使用DOS文件结束(Control-Z)终止。
您现在直接从CON(鞋底)输入名为FILENAME的文件。要查看您键入的内容,请键入type FILENAME
。你会看到你输入的内容。
但为了实现这一点,必须在系统中始终提供一个名为CON
的特殊文件 - 它有点像STDIN的别名 - 我怀疑.NET不允许你放置因此,文件夹路径中的CON。