Почему Path.GetInvalidPathChars() не обнаруживает \r, а Path.GetFullPath() — определяет? (.NET Framework 4.7.2)
Я работаю с приложением .NET 4.7.2 и проверяю пути к файлам.
Я заметил неожиданное поведение, когда входная строка содержит завершающий возврат каретки (\r).
Почему Path.GetInvalidPathChars() не обнаруживает \r, а Path.GetFullPath() — определяет? (.NET Framework 4.7.2) Я работаю с приложением .NET 4.7.2 и проверяю пути к файлам. Я заметил неожиданное поведение, когда входная строка содержит завершающий возврат каретки (\r). [code]string input = "C:\\Temp\\TestFolder\r";
if (input.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0 || input.IndexOfAny(Path.GetInvalidPathChars()) >= 0) { // This block is NOT hit return true; }
try { var fullPath = Path.GetFullPath(input);
if (fullPath.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0 || fullPath.IndexOfAny(Path.GetInvalidPathChars()) >= 0) { // This block IS hit return true; } } catch { return true; } [/code] [b]Наблюдение[/b] [list] [*][code]input[/code] содержит завершающий символ \r [*]Первый if не возвращает true [*]После вызова Path.GetFullPath(input) второй if возвращает true [/list] [b]Вопросы[/b] [list] [*]Почему нет Path.GetInvalidPathChars() обнаруживает \r в исходном вводе?
[*]Разве Path.GetInvalidPathChars() не предназначен для полноценного механизма проверки?
[*]Ожидается ли такое поведение в .NET 4.7.2 или это ошибка?