Я использую 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 в прошлом, это берет торт. Может ли кто-нибудь объяснить, что здесь происходит?
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.
Я подозреваю это, потому что CON
- это удержание от DOS. В DOS CON
есть специальный файл, относящийся к CONSOLE, поэтому вы можете сделать это в командной строке cmd:
COPY CON FILENAME
Теперь введите все, что угодно, в файл с именем FILENAME, т.е. "Вот пример текста".
Завершите работу с конечным файлом DOS (Control-Z).
Теперь вы ввели прямо в файл с именем FILENAME из CON (подошвы). Чтобы просмотреть введенные вами данные, введите type FILENAME
. Вы увидите все, что вы набрали.
Но для этого нужно создать специальный файл с именем CON
всегда доступный в системе - это похоже на псевдоним STDIN - и я подозреваю, что.NET не позволит вам помещать CON в путь к папке по этой причине.