findfile и точки в именах каталогов

ACAD2019x64, все обновления установлены. Windows 10, также со всеми обновлениями.

Допустим, существует файл

1
\\Server\Shared folders\folder.name\file.txt

Необходимо к нему выполнить findfile. Ок, не вопрос:

1
2
(setq a "\\\\Server\\Shared folders\\folder.name\\file.txt")
(findfile a) ; "\\\\Server\\Shared folders\\folder.name\\file.txt"

А что будет, если имя файла (неважно по каким причинам) перевести в верхний регистр?

1
(findfile (strcase a)) ; nil

Как это?! Глюк? Баг? Фича? Начнем разбираться...

Если файл лежит на локальном диске, или на подключенном сетевом диске, то все срабатывает на ура:

1
2
3
(setq a "z:\\Autodesk.docs\\file.txt")
(findfile a) ; "z:\\Autodesk.docs\\file.txt"
(findfile (strcase a)) ; "Z:\\AUTODESK.DOCS\\FILE.TXT"

Но стоит файлу оказаться на сетевом ресурсе типа \\server, да так, чтобы в именах каталогов хотя бы раз присутствовала точка - и файл будет найден только если его имя полностью соответствует тому, что возвращает тот же getfiled.

Я подумал, что это ACAD глючит. Ну ок, попробуем на C# что-нибудь нарисовать:

1
2
3
4
string fileName = "\\\\Server\\Shared folders\\folder.name\\file.txt";
Console.WriteLine($"{fileName} : {File.Exists(fileName)}");
Console.WriteLine($"LCase({fileName}) : {File.Exists(fileName.ToLower())}");
Console.WriteLine($"UCase({fileName}) : {File.Exists(fileName.ToUpper())}");

И результатом будет True, False, False.

Это что ж получается, смена регистра имени файла приводит к тому, что сама Windows его не находит?! Все чудесатее и чудесатее...

Размещено в .NET, AutoCAD, Код LISP · Метки: , , ,



Поделитесь своим мнением


Я не робот.