当路径以" \ CON"?结尾时,为什么IO.DirectoryInfo.FullName会中断?

时间:2015-03-27 04:39:33

标签: c# vb.net

我使用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所做的所有奇怪的事情中,这都很有用。谁能解释一下这里发生了什么?

2 个答案:

答案 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
  1. 现在在名为FILENAME的文件中键入您想要的任何内容,即“这里是一些示例文本。”

  2. 使用DOS文件结束(Control-Z)终止。

  3. 您现在直接从CON(鞋底)输入名为FILENAME的文件。要查看您键入的内容,请键入type FILENAME。你会看到你输入的内容。

    但为了实现这一点,必须在系统中始终提供一个名为CON的特殊文件 - 它有点像STDIN的别名 - 我怀疑.NET不允许你放置因此,文件夹路径中的CON。